大きなメモリを確保するには?

large-memory.png

try~catch(bad_alloc)

double *ptr;
try{
ptr=new double[0xfffffffff];
}catch(bad_alloc){//メモリが確保できなかった場合
cerr<<"メモリ確保失敗。大きすぎた?"<<endl;
abort();
}

bad_allocとは?

正確にはstd::bad_alloc
operator newがメモリを割り当ての要求に応えられなかったとき送出する例外。

現在の空きメモリの量を知る

#include <windows.h>
//メインメモリ空き容量取得
    MEMORYSTATUS ms;
    GlobalMemoryStatus(&ms);
    DWORD dwPh = (ms.dwAvailPhys);

MEMORYSTATUS

typedef struct _MEMORYSTATUS {
  DWORD  dwLength;
  DWORD  dwMemoryLoad;
  SIZE_T dwTotalPhys;
  SIZE_T dwAvailPhys;//現在使用可能な物理メモリのバイト数
  SIZE_T dwTotalPageFile;
  SIZE_T dwAvailPageFile;
  SIZE_T dwTotalVirtual;
  SIZE_T dwAvailVirtual;
} MEMORYSTATUS, *LPMEMORYSTATUS;

MEMORYSTATUSEX

typedef struct _MEMORYSTATUSEX {
  DWORD     dwLength;
  DWORD     dwMemoryLoad;
  DWORDLONG ullTotalPhys;
  DWORDLONG ullAvailPhys;
  DWORDLONG ullTotalPageFile;
  DWORDLONG ullAvailPageFile;
  DWORDLONG ullTotalVirtual;
  DWORDLONG ullAvailVirtual;
  DWORDLONG ullAvailExtendedVirtual;
} MEMORYSTATUSEX, *LPMEMORYSTATUSEX;
Bibliography
3. GlobalMemoryStatusEx()…4GBを超えるメモリを実装したPCの場合はこっちを使う

サポートサイト Wikidot.com