notion d'alignement dans la mémoire
2 participants
Page 1 sur 1
notion d'alignement dans la mémoire
En me documentant sur la création de fenêtres en C via l' API WIN32 (la résolution du problème ne demande pas de notions en cette API), je suis tombé là-dessus :
Tout d'abord, je suis preneur de toute information concernant "l'alignement" en général.
Je vous explique ce que j'ai compris et donc comment je m'y prendrai, dans ce cas particulier* :
__________
précisions :
1. Il faut d'abord allouer suffisamment de mémoire pour contenir une structure DLGTEMPLATE et des structures DLGITEMTEMPLATE.
2. Le pointeur donné par l'allocation est traité comme étant de type DWORD* : on fait comme si l'espace alloué représentait un tableau de valeurs de type DWORD. En effet les cases d'un tableau étant contigües en mémoire, on a bien des valeurs de type DWORD alignées (d'après mes hypothèses).
3. On cast le pointeur pour le transformer en DLGTEMPLATE* puis on remplit la structure associée. On change de nouveau le type du pointeur en DWORD* pour calculer, en quelque sorte, l'indice du prochain élément dans le tableau qui est libre (à l'aide de sizeof(DLGTEMPLATE)), et on y place la structure DLGITEMTEMPLATE (de la même manière : cast ...).
On fait ça pour toutes les structures à placer.
Petit schéma : (l' indice entouré est celui où il faudra placer la structure pour qu'elle soit alignée comme demandé)
Après relecture de la doc., je ne sais plus si ce sont les structures DLGTEMPLATE et DLGITEMTEMPLATE qui doivent être alignées ou juste les structures DLGITEMTEMPLATE entre elles... Mais ça ne gène pas pour l'explication, le principe reste le même.
* j'ai simplifié, y'a d'autres éléments à prendre en compte.
le passage de la doc. en entier si ça peut aider : http://msdn.microsoft.com/en-us/library/ms644994(VS.85).aspx#templates_in_memory
Ai-je bon ?
Merci d'avance !
P.S. : ça ressemble beaucoup à du bricolage, non ?
MSDN a écrit:
[...] you must ensure that the each of the DLGITEMTEMPLATE [...] control definitions are aligned on DWORD boundaries. In addition, any creation data that follows a control definition must be aligned on a DWORD boundary.
Tout d'abord, je suis preneur de toute information concernant "l'alignement" en général.
Je vous explique ce que j'ai compris et donc comment je m'y prendrai, dans ce cas particulier* :
__________
précisions :
_________MSDN a écrit:
In a standard template, the header is a DLGTEMPLATE structure followed by additional variable-length arrays. The data for each control consists of a DLGITEMTEMPLATE structure [...].
1. Il faut d'abord allouer suffisamment de mémoire pour contenir une structure DLGTEMPLATE et des structures DLGITEMTEMPLATE.
2. Le pointeur donné par l'allocation est traité comme étant de type DWORD* : on fait comme si l'espace alloué représentait un tableau de valeurs de type DWORD. En effet les cases d'un tableau étant contigües en mémoire, on a bien des valeurs de type DWORD alignées (d'après mes hypothèses).
3. On cast le pointeur pour le transformer en DLGTEMPLATE* puis on remplit la structure associée. On change de nouveau le type du pointeur en DWORD* pour calculer, en quelque sorte, l'indice du prochain élément dans le tableau qui est libre (à l'aide de sizeof(DLGTEMPLATE)), et on y place la structure DLGITEMTEMPLATE (de la même manière : cast ...).
On fait ça pour toutes les structures à placer.
Petit schéma : (l' indice entouré est celui où il faudra placer la structure pour qu'elle soit alignée comme demandé)
Après relecture de la doc., je ne sais plus si ce sont les structures DLGTEMPLATE et DLGITEMTEMPLATE qui doivent être alignées ou juste les structures DLGITEMTEMPLATE entre elles... Mais ça ne gène pas pour l'explication, le principe reste le même.
* j'ai simplifié, y'a d'autres éléments à prendre en compte.
le passage de la doc. en entier si ça peut aider : http://msdn.microsoft.com/en-us/library/ms644994(VS.85).aspx#templates_in_memory
Ai-je bon ?
Merci d'avance !
P.S. : ça ressemble beaucoup à du bricolage, non ?
Romu'- Bavard
- Messages : 21
Date d'inscription : 09/07/2008
Age : 34
Localisation : France
Re: notion d'alignement dans la mémoire
Suite à un panne d'un serveur chez l'hébergeur du forum ce matin (pas de chance), ma longue réponse à cette question a été perdue. J'avoue ne pas avoir le courage de la retaper pour le moment...
A+
Emmanuel
A+
Emmanuel
Re: notion d'alignement dans la mémoire
Aucun problème, j'ai tout mon temps ;).-ed- a écrit:Suite à un panne d'un serveur chez l'hébergeur du forum ce matin (pas de chance), ma longue réponse à cette question a été perdue. J'avoue ne pas avoir le courage de la retaper pour le moment...
A+
Emmanuel
Romu'- Bavard
- Messages : 21
Date d'inscription : 09/07/2008
Age : 34
Localisation : France
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|