2017-06-22 3 views
3

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.

+2

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. –

+1

[* 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. –

+0

@CodyGray Je suis d'accord avec vous, ils sont très similaires en effet – Thor

Répondre

4

Je veux voir l'empreinte mémoire de chaque version du code une fois le programme compilé ...

La différence est dans la taille de l'exécutable compilé et non la taille de son image en mémoire quand il est en cours d'exécution.

En bref: la plupart des systèmes d'exploitation modernes permettent à un exécutable de déclarer une zone de mémoire comme "rempli à zéro". L'exécutable n'a qu'à indiquer la taille de la région, donc il est beaucoup plus petit que s'il incluait un tas de zéros littéraux pour cette région.

+0

salut duskwuff, aime le golden retriever dans votre photo de profil, j'ai un golden retriever aussi :) – Thor