#include <iostream>
#include <unistd.h>
#include <cstring>
int main() {
size_t array_size = 10ull * 1000 * 1000 * 1000;
size_t number_of_arrays = 20;
char* large_arrays[number_of_arrays];
// allocate more memory than the system can give
for (size_t i = 0; i < number_of_arrays; i++)
large_arrays[i] = new char[array_size];
// amount of free memory didn't actually change
sleep(10);
// write on that memory, so it is actually used
for (size_t i = 0; i < number_of_arrays; i++)
memset(large_arrays[i], 0, array_size);
sleep(10);
for (size_t i = 0; i < number_of_arrays; i++)
delete [] large_arrays[i];
return 0;
}
它分配了很多内存,超出了系统的能力。但是,如果我用top
监视内存使用情况,它实际上并没有减少。程序稍等片刻,然后开始写入分配的内存,然后可用内存量才下降……直到系统无响应并且程序被oom-killer
杀死。我的问题是:
new[]
不应在某个时候抛出std::bad_alloc
吗?3.10.0-514.21.1.el7.x86_64
。也许它在新版本上的表现有所不同?考虑以下在Linux上运行的小程序:#include
#include
为什么Linux承诺分配超出实际容量的内存?