使用全局变量会增加可执行文件的大小吗?如果是,是如何实现的?它是只增加数据部分的大小,还是增加文本部分的大小?
如果我有一个全局变量和初始化,如下所示:
char g_glbarr[1024] = {"jhgdasdghaKJSDGksgJKASDGHKDGAJKsdghkajdgaDGKAjdghaJKSDGHAjksdghJKDG"};现在,这是否将1024添加到数据部分,并将初始化字符串的大小添加到文本部分?
如果相反,如果静态地为这个数组分配空间,如果我错误地锁定它,然后执行memcpy,那么只有数据部分的大小会减少,或者文本部分的大小也会减少?
发布于 2010-12-04 16:49:49
是的,确实如此。基本上,编译器将它们存储在数据段中。有时,如果你在代码中使用一个常量字符数组(比如printf("<1024 char array goes here");),它就会进入数据段(一些老的编译器/Borland?/可能会把它存储在文本段中)。您可以强制编译器将全局变量放在自定义部分中(对于VC++,它是#pragma data_seg(<segment name>))。
动态内存分配不会影响数据/文本段,因为它在堆中分配内存。
发布于 2010-12-04 23:55:34
答案取决于实现,但对于sane实现,这是它对具有静态存储持续时间(全局或其他)的变量的工作方式:
const-qualified.的,则它们可以在单独的只读“bss”段中被创建(
发布于 2010-12-04 16:40:45
我不是以专家的身份发言,但我猜测,在你的程序中简单地使用这个庞大的字符串文字会增加你的可执行文件的大小。您如何处理该字符串并不重要,因为它必须存储在某个地方。
为什么增加可执行文件的哪个“部分”很重要?这不是一个反问句!
https://stackoverflow.com/questions/4352682
复制相似问题