hytlok
hytlok
采纳率50%
2016-04-04 13:57 阅读 1.5k
已采纳

在C语言编程中,我定义的全局变量足有2M大小,但生成的程序只有20k,怎么回事?

在C语言编程中,我定义的全局变量足有2M大小,但生成的程序只有20k,怎么回事?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    gcfang123 gcfang123 2016-04-05 02:25

    你的全局变量没有初始化数据吧?如果你有2M大小的数据,就不一样了。
    比如,
    char a[2*1024*1024] = {0,1,2,3,4..........};
    char b[2*1024*1024];
    在链接器中,a是已初始化数据,b是未初始化数据。已初始化数据需要占用exe空间,未初始化数据就不需要了。

    点赞 1 评论 复制链接分享
  • u010319440 星星89757 2016-04-04 14:19

    栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在 WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2016-04-04 15:22

    全局变量是运行时操作系统分配的,分配在堆上,不是分配在静态区,所以不会影响exe的大小。

    点赞 评论 复制链接分享

相关推荐