我花了很多精力确保我写的C ++应用程序消耗很少的内存。然后我运行顶级(以及其他类似的Linux命令)并且很失望地看到我的应用程序占用的比我想象的要多。我花了一些时间来研究记忆的发展方向,但这有点没用。我终于编写了我能想到的最简单的应用程序:
int main() {
for(;;)
;
}
并在那上面跑了。 Top报道我的极简主义应用消耗了728K RES和4,224K VIRT!当我使用clang ++而不是g ++时,它增加到1,612K RES和13,264 VIRT!有没有搞错?我记得应用程序不能超过640K的旧DOS时代。现在一个简单的空for循环甚至比这更多?显然我错过了一些东西。它是什么?
顺便说一句,我正在运行Mint 8.1。答案 0 :(得分:0)
首先,您的最小程序调用未定义的行为。是的,infinite loop in C++ invokes Undefined Behavior。
更重要的是,main()
通常是您计划中的not the first function executed。设置了很多结构,在main之前可能会或可能不会初始化全局对象。
默认情况下,您的工具链(至少是受欢迎的工具链)会链接其他库,包括(但不限于):
您的可执行文件本身将包含一些额外的结构,以使操作系统能够将程序加载到内存中,解析要加载的外部库等等。