2016-03-05 5 views
4

1er cas:Comportement étrange de la taille utilitaire

#include <stdio.h> 

int main(void) 
{ 
    return 0; 
} 

sortie Taille:

text  data  bss  dec  hex filename 

1115  552  8 1675  68b ./a.out 

2ème cas:

#include <stdio.h> 

int global; // new line compared to previous case 

int main(void) 
{ 
    return 0; 
} 
sortie taille

:

text  data  bss  dec  hex filename 
1115  552  8 1675  68b ./a.out 

Idéalement, il devrait être:

bss=12 and all other (text and data) same 

3ème cas:

#include <stdio.h> 

int global; 

int main(void) 
{ 
    static int i; // new line compared to previous case 
    return 0; 
} 
sortie taille

:

text  data  bss  dec  hex filename 
1115  552  16 1683  693 ./a.out 

cela est correct

Pourquoi la sortie dans 2 cas est incorrect?

+3

Quels sont vos indicateurs d'optimisation? – zoul

+5

C'est comme ignoré par le compilateur car il n'est pas utilisé du tout. – Ian

+1

Dans le troisième cas, avez-vous conservé la variable 'global'? –

Répondre

2

Vous compilez probablement pour une architecture 64 bits, où vous avez aligné la mémoire sur 8 octets (64 bits).

Un programme aussi simple que celui de votre premier cas a une bss de départ de 4 octets, mais 8 octets est allouée à des fins d'alignement, de sorte que vous déclarez la variable globale , vous avez rempli la gauche 4 octets.

Déclarer une autre variable de 4 octets ajoutera 8 octets au bss, jusqu'à ce qu'il soit également rempli, et ainsi de suite.