【发布时间】:2017-05-30 02:56:22
【问题描述】:
我花了很多精力来确保我编写的 C++ 应用程序占用的内存非常少。然后我运行了 top (和其他类似的 Linux 命令)并且很失望地看到我的应用程序占用的比我想象的要多。我花了一些时间挖掘那段记忆的去向,但这有点徒劳无功。我终于写出了我能想到的最简单的应用程序:
int main() {
for(;;)
;
}
并在上面跑了。 Top 报告说我的极简应用程序消耗了 728K RES 和 4,224K VIRT!当我使用 clang++ 而不是 g++ 时,增加到 1,612K RES 和 13,264 VIRT!有没有搞错?我记得以前的 DOS 时代,应用程序不能超过 640K。现在一个简单的空 for 循环需要的还不止这些?显然我错过了一些东西。这是什么?
顺便说一句,我正在运行 Mint 8.1。
【问题讨论】:
-
您忘记了您的程序不仅仅包含
main()。它与 C 和 C++ 标准库链接。 -
所以当我新建 100 个大小为 4 字节的对象时,大小增加到 1720K RES 和 13,268K VIRT。为什么分配 400 字节会使我的内存使用量增加约 1M?
-
@user545226,对于 动态 内存分配,您的实现使用的内存分配系统(
operator new、malloc等使用的任何系统)通常会请求更多内存来自操作系统的请求超出了您的要求,这可以防止在需要内存时始终进行系统调用。并且删除对象也不一定会返回内存。另一方面,编译器可能会针对不同的程序进行不同的优化。即使区别在于两个对象的声明顺序