Last Updated 2000/02/29
 Programming Tips  Windows3.1  索 引 
コンベンションメモリ
2000/02/29

標準のAPIはありません.

/* 
   現在のコンベンショナルメモリーの空き容量を計算して返す
   単位はバイト
   ただし512バイト以下の誤差あり
*/
DWORD GetFreeDosMemSize(void)
{
    UINT uiSel, uiSelLast = 0;
    DWORD dwFreeSize = 0, cbAllocNow = 65536L * 2;
    while(cbAllocNow >= 512) {
        if((uiSel = LOWORD(GlobalDosAlloc(cbAllocNow))) != 0) {
            dwFreeSize += cbAllocNow;
            GlobalLock(uiSel);
            *((LPUINT)MAKELP(uiSel, 0)) = uiSelLast;
            uiSelLast = uiSel;
        } else {
            cbAllocNow = (cbAllocNow * 3) / 4;
        }
    }
    while(uiSelLast != 0) {
        uiSel = *(LPUINT)MAKELP(uiSelLast, 0);
        GlobalUnlock(uiSelLast);
        GlobalDosFree(uiSelLast);
        uiSelLast = uiSel;
    }
    return dwFreeSize;
}


参照
前後のTips
コンベンションメモリ

DSS ProgrammingTipsCGI Ver2.00