为什么Linux报告我的应用程序的内存使用量太大了?

时间:2017-05-30 02:56:22

标签: c++ linux g++ clang++

我花了很多精力确保我写的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。

1 个答案:

答案 0 :(得分:0)

首先,您的最小程序调用未定义的行为。是的,infinite loop in C++ invokes Undefined Behavior

更重要的是,main()通常是您计划中的not the first function executed。设置了很多结构,在main之前可能会或可能不会初始化全局对象。

默认情况下,您的工具链(至少是受欢迎的工具链)会链接其他库,包括(但不限于):

  • 您的工具链的C ++运行时库(它支持您的C ++程序以及一些基本服务)
  • C ++标准库,很可能也是C标准库
  • 您的操作系统库(您的程序如何与控制台通信?)
  • 可能更多。

您的可执行文件本身将包含一些额外的结构,以使操作系统能够将程序加载到内存中,解析要加载的外部库等等。