我花了很多精力来确保我编写的 C++ 应用程序消耗的内存很少。然后我运行了 top(和其他类似的 Linux 命令)并且很失望地看到我的应用程序占用的时间比我想象的要多。我花了一些时间来挖掘那段内存的去向,但这有点毫无结果。我终于写出了我能想到的最简单的应用程序:
int main() {
for(;;)
;
}
并在这方面名列前茅。 Top 报告说我的极简主义应用程序消耗了 728K RES 和 4,224K VIRT!当我使用 clang++ 而不是 g++ 时,它增加到 1,612K RES 和 13,264 VIRT!有没有搞错?我记得应用程序不能超过 640K 的旧 DOS 时代。现在一个简单的空 for 循环比这还要多?显然我错过了一些东西。这是什么?
顺便说一句,我正在运行 Mint 8.1。
最佳答案
首先,您的最小程序会调用未定义行为。是的,infinite loop in C++ invokes Undefined Behavior .
更重要的是,main()
通常是 not the first function executed在你的程序中。设置了很多结构,全局对象可能会也可能不会在 main 之前初始化。
默认情况下,您的工具链(至少是流行的工具链)将链接其他库,包括(但不限于):
- 您的工具链的 C++ 运行时库(通过一些基本服务支持您的 C++ 程序)
- C++ 标准库,很可能也是 C 标准库
- 您的操作系统库(您的程序还如何与控制台通信?)
- 可能还有更多。
您的可执行文件本身将包含一些额外的结构,以使操作系统能够将您的程序加载到内存中,解析要加载的外部库等等。
关于c++ - 为什么 Linux 报告我的应用程序的内存使用量太大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44252707/