这应该每秒填充我的记忆,大约100 MB。我用gnome-systemmonitor和htop跟踪内存。但不知怎的,它没有。为什么呢?
#include "unistd.h"
#include <iostream>
int main(int argc, char *argv[])
{
while (true){
std::cout << "New one" << std::endl;
new char[100000000];
sleep(1);
}
return 0;
}
运行:
g++ -std=c++11 -O0 main.cpp; ./a.out
答案 0 :(得分:8)
因为您没有使用它,所以Linux会进行延迟分配,因此在您使用之前它不会实际映射任何内存页。
如果你输入一些代码:
char* test = new char[100000000];
test[0] = 'a';
test[4096] = 'b';
...
你应该看到它实际消耗你的系统内存。
答案 1 :(得分:2)
我只看到clang optimize away calls to new,一般情况下,当您使用-O0
时,编译器不会执行此类积极优化。
我们可以从godbolt看到gcc
确实没有在非常相似的代码中优化对new
的调用:
.L2:
movl $100000000, %edi
call operator new[](unsigned long)
movl $1, %edi
call sleep
jmp .L2
因此最有可能Paul is correct并且涉及延迟分配,因此一旦您写入分配的内存,您将看到它被使用。