看书上说可执行程序有 .bss .data .text 区,记录着全局变量和代码指令、那么如果一个程序足够复杂,全局变量和代码指令非常多,编译出的exe非常大,那是不是意味着程序初始化时需要更多的内存?
至少需要比exe文件大小更多的内存?
看书上说可执行程序有 .bss .data .text 区,记录着全局变量和代码指令、那么如果一个程序足够复杂,全局变量和代码指令非常多,编译出的exe非常大,那是不是意味着程序初始化时需要更多的内存?
至少需要比exe文件大小更多的内存?
你说的在一定程度上是对的,exe越大程序所占用的静态空间就越大。但程序在运行的过程中除了静态空间,还会分配动态的空间,而且动态空间有时候比静态空间还要大,程序的内存占用=静态空间+动态空间,所以很多时候exe文件的大小不是内存占用决定性的因素。
答案是:会影响,但是就像前面一位答主说了,通常不是程序运行时占用内存的决定性因素。
可执行文件运行是会被加载进内存,这时大的可执行文件就会比小的可执行文件占用更多的内存。当程序开始运行起来后可能会申请动态内存,或者使用很大的栈内存,这些内存的使用量和exe本身大小没关系,只和程序的内在逻辑有关。
有些特殊程序,比如比较大的自解压的exe,运行时用的动态空间应该是远远小于静态空间的,这种exe确实是程序越大占用内存越多的。
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
这涉及程序加载的具体过程,程序加载时候将elf和内存虚拟空间做了一个映射,此时并没有将整个elf都加载进去,当程序运行过程中需要用到没加载的部分时候会发生缺页错误,此时操作系统才去磁盘加载缺失的部分