4

我正在尝试检查我的操作系统中的内存限制是否有效。所以我使用的是简单的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?

4

2 回答 2

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查看保留了哪些内存块以及提交了哪些内存块。

于 2013-06-19T13:50:14.210 回答
1

操作系统只会“使用”您实际触摸的内存,因此除非您实际“使用”内存,否则它不会显示在性能监视器或类似设备上。这是因为某些应用程序会“以防万一”分配大量内存,并且实际上将内存填充到进程中需要大量额外的时间,而实际上它并没有被使用。

于 2013-06-19T13:49:42.007 回答