J'apprends actuellement la programmation d'assemblage en suivant le «langage d'assemblage pour processeur x86» de Kip Irvine. Dans la section 3.4.12, l'auteur indique:Comment voir la mémoire occupée par un tableau initialisé par rapport à un tableau non initialisé
La directive
.DATA?
déclare des données non initialisées. Lors de la définition d'un grand bloc de données non initialisées , la directive.DATA?
réduit la taille d'un programme compilé. Par exemple, le code suivant est déclaré efficacement:.data smallArray DWORD 10 DUP(0) ; 40 bytes .data? bigArray DWORD 5000 DUP(?) ; 20,000 bytes, not initialized
Le code suivant, d'autre part, produit un programme compilé 20 000 octets plus grands:
.data smallArray DWORD 10 DUP(0) ; 40 bytes bigArray DWORD 5000 DUP(?) ; 20,000 bytes
Je veux voir la l'empreinte mémoire de chaque version du code après que le programme est compilé, donc je peux voir l'effet de .data?
pour moi-même, mais je ne suis pas sûr de savoir comment cela peut être fait.
Il est présenté dans la carte des liens. Utilisez/Fm basculer si la compilation ** et ** lier avec ml.exe, ou/lien si la liaison dans une étape distincte en utilisant link.exe. –
[* Très * question similaire] (https://stackoverflow.com/questions/7137049/how-does-masm-data-directive-work-internally); J'envisage de combiner ces deux et de marquer celui-ci comme un doublon pour garder l'information ensemble en un seul endroit. –
@CodyGray Je suis d'accord avec vous, ils sont très similaires en effet – Thor