一个exe文件的大小 ,会影响其运行时所占的内存吗?

新手上路,请多包涵

看书上说可执行程序有 .bss .data .text 区,记录着全局变量和代码指令、那么如果一个程序足够复杂,全局变量和代码指令非常多,编译出的exe非常大,那是不是意味着程序初始化时需要更多的内存?
至少需要比exe文件大小更多的内存?

阅读 6k
5 个回答

这涉及程序加载的具体过程,程序加载时候将elf和内存虚拟空间做了一个映射,此时并没有将整个elf都加载进去,当程序运行过程中需要用到没加载的部分时候会发生缺页错误,此时操作系统才去磁盘加载缺失的部分

新手上路,请多包涵

直接说结论:运行文件所需内存大小和文件本身占用磁盘的大小并没有直接的关系。
这种问题自己直接写个程序验证一下就知道了。

你说的在一定程度上是对的,exe越大程序所占用的静态空间就越大。但程序在运行的过程中除了静态空间,还会分配动态的空间,而且动态空间有时候比静态空间还要大,程序的内存占用=静态空间+动态空间,所以很多时候exe文件的大小不是内存占用决定性的因素。

答案是:会影响,但是就像前面一位答主说了,通常不是程序运行时占用内存的决定性因素。

可执行文件运行是会被加载进内存,这时大的可执行文件就会比小的可执行文件占用更多的内存。当程序开始运行起来后可能会申请动态内存,或者使用很大的栈内存,这些内存的使用量和exe本身大小没关系,只和程序的内在逻辑有关。

有些特殊程序,比如比较大的自解压的exe,运行时用的动态空间应该是远远小于静态空间的,这种exe确实是程序越大占用内存越多的。

1个人的饭量不取决于现有的体重

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题