new 不分配内存
new does not allocate 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
因为你没有使用它,所以 Linux 会进行延迟分配,所以在你使用它之前,它实际上不会映射任何内存页。
如果你放一些代码,比如:
char* test = new char[100000000];
test[0] = 'a';
test[4096] = 'b';
...
您应该看到它实际上正在消耗您的系统内存。
我只看到clang优化了对new的调用,一般来说,当您使用-O0
时,编译器不会执行如此积极的优化。
我们可以从 godbolt 中看到,gcc
确实没有优化对非常相似的代码中的new
调用:
.L2:
movl $100000000, %edi
call operator new[](unsigned long)
movl $1, %edi
call sleep
jmp .L2
所以很可能 Paul 是正确的,并且涉及惰性分配,因此一旦你写入分配的内存,你会看到它被使用。
相关文章:
- Win32编译器选项和内存分配
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 当需要超过16GB的连续内存时,内存分配失败
- 尝试摆脱任何堆内存分配
- 以下代码执行哪种内存分配(动态或静态)?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- C++:矢量分配器行为、内存分配和智能指针
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- Linux C++ 中的页面对齐内存分配
- 整数内存分配/释放
- 将内存分配返回值强制转换为 TYPE 数组
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 给定特定内存地址的数组的动态内存分配
- 如何完成内存分配
- 我刚刚了解了C++中的动态内存分配
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 无法删除布尔动态内存分配