new不分配内存

时间:2015-04-29 12:56:40

标签: c++ memory

这应该每秒填充我的记忆,大约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  

2 个答案:

答案 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并且涉及延迟分配,因此一旦您写入分配的内存,您将看到它被使用。