我正在尝试检查我的操作系统中的内存限制是否有效。所以我使用的是简单的c程序:
#include <iostream>
#include <cstdlib>
int main()
{
const size_t GB = 1024 * 1024 * 1024;
const size_t mem = 1 * GB;
std::cout << "allocating " << mem << " bytes" << std::endl;
void* p = malloc(mem);
if (p) { std::cout << "memory allocated" << std::endl; }
else { std::cout << "cannot allocate memory" << std::endl; }
char a;
std::cin >> a;
free(p);
}
我正在使用-O0
进行编译,但是当我查看性能监视器时,我发现我的a.out
仅使用128Kb。为什么我看不到1 GB?
答案 0 :(得分:3)
你需要提交内存。只要您保留它,您就已经分配了“虚拟内存”。您承诺阅读或写入内存。使用您的程序只需添加
void* p = malloc(mem);
if (p) {
std::cout << "memory allocated" << std::endl;
memset(p, 0, mem);
} else {
std::cout << "cannot allocate memory" << std::endl; }
在Windows操作系统中,您可以使用函数VirtualQuery
来查看保留了哪些内存块以及提交的内容。
答案 1 :(得分:1)
操作系统只会“使用”您实际触摸的内存,因此它不会显示在性能监视器上,或者除非您实际“使用”内存之外。这是因为一些应用程序“以防万一”分配大量内存,并且实际上它没有被使用时,实际上将该内存填充到进程中需要花费很多额外的时间。