Bien programmer en langage C
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment : -15%
(Adhérents Fnac) LEGO® Star Wars™ ...
Voir le deal
552.49 €

notion d'alignement dans la mémoire

2 participants

Aller en bas

notion d'alignement dans la mémoire Empty notion d'alignement dans la mémoire

Message  Romu' Jeu 5 Fév 2009 - 16:37

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 :

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é)
notion d'alignement dans la mémoire Align_11

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
Bavard

Messages : 21
Date d'inscription : 09/07/2008
Age : 34
Localisation : France

Revenir en haut Aller en bas

notion d'alignement dans la mémoire Empty Re: notion d'alignement dans la mémoire

Message  -ed- Sam 7 Fév 2009 - 17:19

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
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

notion d'alignement dans la mémoire Empty Re: notion d'alignement dans la mémoire

Message  Romu' Dim 8 Fév 2009 - 13:28

-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
Aucun problème, j'ai tout mon temps ;).

Romu'
Bavard
Bavard

Messages : 21
Date d'inscription : 09/07/2008
Age : 34
Localisation : France

Revenir en haut Aller en bas

notion d'alignement dans la mémoire Empty Re: notion d'alignement dans la mémoire

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser