是否有全局变量会增加可执行文件的大小?如果有,怎么样?它是仅增加数据部分大小还是增加文本部分大小?
如果我有一个全局变量和初始化如下:
char g_glbarr[1024] = {"jhgdasdghaKJSDGksgJKASDGHKDGAJKsdghkajdgaDGKAjdghaJKSDGHAjksdghJKDG"};
Run Code Online (Sandbox Code Playgroud)
现在,这是否将1024添加到数据部分,并将启动字符串的大小添加到文本部分?
如果相反,如果静态地为这个数组分配空间,如果我malloc它,然后做一个memcpy,只有数据部分大小会减少或文本部分大小也会减少?
是的,它确实.基本上编译器将它们存储到数据段.有时,如果你在你的代码中使用常量字符数组(喜欢printf("<1024 char array goes here");
)将进入数据段(据我所知一些老的编译器/ Borland公司?/可以将其存储在文本段).您可以强制编译器将全局变量放在自定义部分中(对于VC++ #pragma data_seg(<segment name>)
).
动态内存分配不会影响数据/文本段,因为它在堆中分配内存.