Linux承诺的内存将超过它所能提供的[副本]

问题描述 投票:1回答:1
考虑以下在Linux上运行的小程序:

#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杀死。

我的问题是:

    为什么Linux承诺分配超出其实际能力的内存? new[]不应在某个时候抛出std::bad_alloc吗?
  • 我如何确保Linux实际上
  • 占用
  • 一块内存而不必写入呢?我正在编写一些基准测试,我想在这些基准测试中分配大量内存fast,但是同时,我需要保持低于某些内存限制。是否有可能监视此“承诺的”内存量?
  • 内核版本为3.10.0-514.21.1.el7.x86_64。也许它在新版本上的表现有所不同?

考虑以下在Linux上运行的小程序:#include

#include #include int main(){size_t array_size = 10ull * 1000 * 1000 * 1000; ...

c++ linux memory-management
1个回答
1
投票
为什么Linux承诺分配超出实际容量的内存?
© www.soinside.com 2019 - 2024. All rights reserved.