4

OS のメモリ制限が機能するかどうかを確認しようとしています。だから私はこれを使用していますシンプルな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.out128Kb しか使用していないことがわかります。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

OS は実際に触れているメモリしか「使用」しないため、実際にメモリを「使用」しないとパフォーマンス モニタなどに表示されません。これは、一部のアプリケーションが「万が一に備えて」大量のメモリを割り当てるためであり、実際には使用されていないときに、そのメモリをプロセスに実際に取り込むには多くの余分な時間がかかるためです。

于 2013-06-19T13:49:42.007 に答える