2013-06-19 30 views
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?

+0

將其標記爲'C++'.. – VoidPointer

+2

因爲您不真的*使用所有分配的內存。開始寫入隨機位置,你會看到一些變化。 –

+1

...爲了擴展@VoidPointer的評論,改用'new'和'delete'。 –

回答

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看到保留哪些數據塊的內存,什麼承諾。

+0

謝謝你,你的意思是'memset(p,0,mem);' –

1

操作系統只會「使用」你實際觸摸的內存,所以它不會顯示在性能監視器或類似的內容上,除非你實際上「使用」內存。這是因爲某些應用程序爲了「以防萬一」分配大量內存,並且實際上它沒有被使用時需要大量額外時間才能將該內存填充到進程中。