1

Visual Studio を使用して C++ プログラムを作成し、new 演算子を使用してメモリを割り当てたとします。new が標準の 4KB ページの代わりに大きなページを自動的に使用するようにする方法があるかどうか疑問に思っています (つまり、私のプログラムで VirtualAlloc を明示的に呼び出す必要はありません)。

御時間ありがとうございます。

4

2 に答える 2

3

すべてのnewおよびdelete演算子をオーバーライドできます。例えば

void * operator new(size_t size)
{
    return malloc(size);
}

void operator delete(void * pointer)
{
    free(pointer);
}

同様に、この演算子のすべてのバリアントをオーバーライドする必要があります。

于 2013-04-23T08:13:15.147 に答える
1

もう一度、実装固有です。すべての標準では、AFAIK は new が C++ にメモリを割り当てると述べているため、すべてのライブラリがそのように制限されているわけではありません。Microsoft の実装では、new は常に HeapAlloc を呼び出します。

http://cboard.cprogramming.com/cplusplus-programming/98364-new-invokes-virtualalloc.html

私の理解では、仮想マシンで実行していない限り、OS はデフォルトのヒープとスタック メモリの割り当てを完全に制御できます。上記のリンクは、あなたの質問に対するレイモンドの回答に沿った良い点も示しています。大きなページを使用する必要がありますか? そうすることで、かなりの内部断片化に自分自身を開放します。

于 2013-04-22T21:41:39.770 に答える