2010-03-22 3 views
1

Je me suis récemment lancée dans l'assemblage et c'est amusant car cela remet en question tout ce que j'ai appris. Je me demandais si je pouvais poser quelques questionsQuestion d'utilisation de la mémoire de programmation pour débutant

  1. Lors de l'exécution d'un exécutable, ne l'ensemble exécutable se charge en mémoire? A partir d'un peu de fiddling j'ai trouvé que les constantes ne sont pas vraiment constantes? Est-ce juste une chose de compilateur?

const int i = 5;

_asm { mov i, 0 } // i est maintenant 0 et compile bien

Ainsi sont toutes les variables assignées à une valeur constante intégrée dans le fichier ainsi? Signification:

int a = 1;

const int b = 2;

void something() { const int c = 3; int d = 4; }

Vais-je trouver toutes ces variables intégrées dans le fichier (dans un éditeur hexadécimal ou quelque chose)?

  1. Si l'exécutable est chargé en mémoire, les "constantes" utilisent techniquement la mémoire? J'ai lu sur le net que les constantes n'utilisent pas la mémoire, est-ce vrai?

Répondre

1

Le système d'exploitation charge les segments de code et de données afin de les préparer à l'exécution.
Si l'exécutable comporte un segment de ressource, l'application en charge des parties à la demande.

Il est vrai que const variables prennent l'espace mémoire, mais les compilateurs sont libres pour optimiser
pour l'utilisation de la mémoire et la taille du code et intégrer leurs valeurs dans le code.
(dans le cas où ils ne sont pas détecter toutes les références d'adresse pour les variables)

const char * aka C cordes, sont généralement interned par les compilateurs, pour économiser de la mémoire.

2
  1. Votre texte de fichier exécutable (par exemple de code) et les segments de données se mappée dans l'espace d'adressage virtuel du processus lorsque l'exécutable démarre, mais les octets peut pas réellement être copié à partir du disque jusqu'à ce que ces emplacements de mémoire sont accessibles . Voir http://en.wikipedia.org/wiki/Demand_paging

  2. Les constantes de langage C existent réellement dans la mémoire, car vous devez être capable d'en prendre l'adresse. (Cela signifie &i.) Les constantes se trouvent généralement dans le segment .rdata de votre image exécutable. Une constante va prendre de la mémoire quelque part - si vous avez le nombre constant 42 dans votre programme, il doit y avoir quelque part en mémoire où le 42 est stocké, même si cela signifie qu'il est stocké comme argument de une instruction en mode immédiat.