プログラミングのメモ帳(C/C++/HSP)

日々のプログラミングで気づいた点や小技集を紹介します。(Windows 10/XP/Vista、VC2017、HSP)

メモリの動的確保/解放

2007年09月14日 18時37分08秒 | メモリ関連

メモリを動的に確保するにはGlobalAlloc()関数を使います。
動的確保したメモリを解放するにはGlobalFree()関数を使います。
移動可能メモリの場合はGlobalLock()GlobalUnlock()関数も使います。(戻る)

  1. // 割り当ての属性
  2. GMEM_FIXED(固定メモリ)
  3. GMEM_MOVEABLE(移動可能メモリ)
  4. GMEM_ZEROINIT(確保時にゼロ初期化)
  5. GPTR(GMEM_ZEROINIT | GMEM_FIXEDと同じ)
  6. GHND(GMEM_ZEROINIT | GMEM_MOVEABLEと同じ)

プロトタイプ宣言

HGLOBAL GlobalAlloc(
  UINT uFlags,    // 割り当ての属性
  SIZE_T dwBytes  // 割り当てのバイト数
);

HGLOBAL GlobalFree(
  HGLOBAL hMem  // グローバルメモリのハンドル
);

LPVOID GlobalLock(
  HGLOBAL hMem  // グローバルメモリのハンドル
);

BOOL GlobalUnlock(
  HGLOBAL hMem  // グローバルメモリのハンドル
);

サンプル

// 固定メモリの動的確保
HGLOBAL hMem;
LPTSTR lpBuff;

if ( (hMem = GlobalAlloc(GPTR,100 * 1024)) != NULL ){  // 100 KB確保
  // 固定メモリではキャストするだけで良い
  lpBuff = (LPTSTR)hMem;
  /*
  ここでlpBuffを使う
  */
  GlobalFree( hMem );
}

サンプル

// 移動可能メモリの動的確保
HGLOBAL hMem;
LPTSTR lpBuff;

if ( (hMem = GlobalAlloc(GHND,100 * 1024)) != NULL ){  // 100 KB確保
  // 移動可能メモリではロックする必要がある
  if ( (lpBuff = (LPTSTR)GlobalLock(hMem)) != NULL ){
    /*
    ここでlpBuffを使う
    */
    GlobalUnlock( hMem );
  }
  GlobalFree( hMem );
}
  • // (破棄マーク付きの)ハンドルだけ作成したい場合
  • HGLOBAL hMem = GlobalAlloc( GMEM_MOVEABLE, 0 );
  • ※最初にハンドルだけを作成しておき、後でメモリを割り当てる場合に使います。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« メモリ領域のコピー/移動 | トップ | メモリサイズの拡張/収縮 »
最新の画像もっと見る

コメントを投稿

メモリ関連」カテゴリの最新記事