【发布时间】:2015-04-29 12:56:40
【问题描述】:
这应该每秒用大约 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
【问题讨论】:
-
很可能是延迟分配。尝试向分配的数组写入一些内容。
-
我原本以为它与this 相关,但似乎即使使用
5.1gcc 也不会像clang 和godbolt shows gcc does call new 那样对new 进行相同的优化......所以Paul 可能是正确的... 另一方面,clang 将优化对 new away 的调用-O1和更大。 -
您知道 100MB 将是 char[104857600]?我猜新命令会被优化出来,因为它没有理由在那里......
-
@ShafikYaghmour 这就是我使用 -O0 的原因
-
您没有分配任何内存。在任何现代按需分页虚拟内存操作系统(如 OSX、Linux、Windows)上,您只分配地址空间。 64 位操作系统有多达 256 TB 的可用空间。所以你可能只是等待的时间不够长,它需要 256E12 / 1E8 * sleep(1) = 256E4 毫秒 = 2560 秒。差不多一个小时的3/4。删除 sleep(1) 调用会更快:)