heap create

HeapCreate

  • 呼び出し側プロセスが使用できるヒープオブジェクトを作成
  • プロセスの仮想アドレス空間内の領域を予約し、このブロック内の指定された初期のパートに物理格納域を割り当てる
HANDLE HeapCreate(
  DWORD flOptions,       // ヒープ割り当て方法の属性
  SIZE_T dwInitialSize,  // 初期のヒープサイズ
  SIZE_T dwMaximumSize   // 最大ヒープサイズ
);
  • flOptions
    • 新しく作成したいヒープのオプションの属性を指定
    • それ以降、HeapAlloc、HeapFree、HeapReAlloc、HeapSize の各ヒープ関数を呼び出してこの新しいヒープにアクセスする際に、これらのオプションは影響
  • dwInitialSize
    • ヒープの初期サイズをバイト単位で指定
    • この値は、最初の段階でヒープに割り当てられる物理格納域( 実際のメモリ)の量を決定
    • この値は、ページ単位へ切り上げられます。ホストコンピュータのページサイズを調べるには、 関数を使います。
  • dwMaximumSize
    • dwMaximumSize の値が 0 以外の場合、ヒープの最大サイズをバイト単位で指定
    • HeapCreate 関数は dwMaximumSize を次のページ領域へ切り上げ、プロセスの仮想アドレス空間内で、そのサイズのブロックをそのヒープ用に予約
    • HeapAlloc または HeapReAlloc 関数が、dwInitialSize で指定された初期の物理格納域の量を超える割り当てを要求すると、システムはヒープの最大サイズを超えない限り、そのヒープに物理格納域の追加ページを割り当て。
    • dwMaximumSize に 0 以外の値を指定した場合、ヒープはそれ以上拡張されることがありませんし、絶対的な限界も設定
    • ヒープ内の各メモリブロックの最大サイズは、0x7FFF8(10 進の 524,280)バイトより少し小さなサイズに制限
    • このサイズを超えるブロックの割り当てを要求すると、たとえヒープがそのブロックを収容できる十分な大きさであっても、その割り当ては失敗
    • dwMaximumSize に 0 を指定した場合、ヒープが拡張可能に
    • ヒープのサイズは、利用可能なメモリによってだけ制限されます。0x7FFF8 バイトを超えるブロックの割り当てを要求しても、自動的に失敗することはない
    • システムはそのような大きなブロックが必要とするメモリを取得するために、VirtualAlloc を呼び出す
    • 大きなメモリブロックを割り当てる必要があるアプリケーションでは、dwMaximumSize に 0 を指定
  • 戻り値
    • 成功:新しく作成されたヒープのハンドル
    • 失敗:NULL
      • 拡張エラー情報を取得するには、 関数を使用