Search code examples
csizevxworks

How do global variables contribute to the size of the executable?


Does having global variables increase the size of the executable? If yes how? Does it increase only the data section size or also the text section size?

If I have a global variable and initialization as below:

char g_glbarr[1024] = {"jhgdasdghaKJSDGksgJKASDGHKDGAJKsdghkajdgaDGKAjdghaJKSDGHAjksdghJKDG"};

Now, does this add 1024 to data section and the size of the initilization string to text section?

If instead if allocating space for this array statically, if I malloc it, and then do a memcpy, only the data section size will reduce or the text section size also will reduce?


Solution

  • Yes, it does. Basically compilers store them to data segment. Sometimes if you use a constant char array in you code (like printf("<1024 char array goes here");) it will go to data segment (AFAIK some old compilers /Borland?/ may store it in the text segment). You can force the compiler to put a global variable in a custom section (for VC++ it was #pragma data_seg(<segment name>)).

    Dynamic memory allocation doesn't affect data/text segments, since it allocates memory in the heap.