Win32 API 日本語リファレンス
ホームSystem.SystemInformation › MEMORYSTATUS

MEMORYSTATUS

構造体
サイズx64: 56 バイト / x86: 32 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
dwLengthDWORD4+0+0MEMORYSTATUS データ構造体のサイズ (バイト単位)。 GlobalMemoryStatus 関数を呼び出す前にこのメンバーを設定する必要はありません。関数が設定します。
dwMemoryLoadDWORD4+4+4使用中の物理メモリのおおよその割合 (パーセント) を指定する 0 から 100 までの数値です (0 はメモリが使用されていないことを、100 はメモリが完全に使用されていることを示します)。
dwTotalPhysUINT_PTR8/4+8+8実際の物理メモリの量 (バイト単位)。
dwAvailPhysUINT_PTR8/4+16+12現在利用可能な物理メモリの量 (バイト単位)。これは、内容を先にディスクへ書き込むことなく直ちに再利用できる物理メモリの量です。スタンバイ リスト、フリー リスト、およびゼロ リストのサイズの合計です。
dwTotalPageFileUINT_PTR8/4+24+16コミット メモリの制限値の現在のサイズ (バイト単位)。これは物理メモリにページ ファイルのサイズを加え、わずかなオーバーヘッドを差し引いた値です。
dwAvailPageFileUINT_PTR8/4+32+20現在のプロセスがコミットできるメモリの最大量 (バイト単位)。この値はシステム全体の利用可能なコミット量よりも小さくなります。この値を算出するには、GetPerformanceInfo を呼び出し、CommitLimit から CommitTotal の値を引きます。
dwTotalVirtualUINT_PTR8/4+40+24呼び出し元プロセスの仮想アドレス空間のうち、ユーザー モード部分のサイズ (バイト単位)。この値は、プロセスの種類、プロセッサの種類、およびオペレーティング システムの構成によって異なります。たとえば、この値は x86 プロセッサ上のほとんどの 32 ビット プロセスでは約 2 GB、4 GT RAM チューニングが有効なシステムで実行されるラージ アドレス対応の 32 ビット プロセスでは約 3 GB になります。
dwAvailVirtualUINT_PTR8/4+48+28呼び出し元プロセスの仮想アドレス空間のユーザー モード部分において、現在予約もコミットもされていないメモリの量 (バイト単位)。

公式ドキュメント

物理メモリと仮想メモリの両方の現在の状態に関する情報を格納します。 GlobalMemoryStatus 関数は、 MEMORYSTATUS 構造体に情報を格納します。

解説(Remarks)

MEMORYSTATUS は、呼び出しが行われた時点でのメモリの状態を反映します。また、その時点でのページング ファイルのサイズも反映します。オペレーティング システムは、管理者が設定した最大サイズまでページング ファイルを拡大できます。

4 GB を超えるメモリを搭載したコンピューターでは、 MEMORYSTATUS 構造体が誤った情報を返し、オーバーフローを示す値として –1 を報告することがあります。アプリケーションがこの動作の影響を受けるおそれがある場合は、 GlobalMemoryStatus 関数ではなく GlobalMemoryStatusEx 関数を使用してください。

例については、 GlobalMemoryStatus 関数を参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// MEMORYSTATUS  (x64 56 / x86 32 バイト)
typedef struct MEMORYSTATUS {
    DWORD dwLength;
    DWORD dwMemoryLoad;
    UINT_PTR dwTotalPhys;
    UINT_PTR dwAvailPhys;
    UINT_PTR dwTotalPageFile;
    UINT_PTR dwAvailPageFile;
    UINT_PTR dwTotalVirtual;
    UINT_PTR dwAvailVirtual;
} MEMORYSTATUS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MEMORYSTATUS
{
    public uint dwLength;
    public uint dwMemoryLoad;
    public UIntPtr dwTotalPhys;
    public UIntPtr dwAvailPhys;
    public UIntPtr dwTotalPageFile;
    public UIntPtr dwAvailPageFile;
    public UIntPtr dwTotalVirtual;
    public UIntPtr dwAvailVirtual;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MEMORYSTATUS
    Public dwLength As UInteger
    Public dwMemoryLoad As UInteger
    Public dwTotalPhys As UIntPtr
    Public dwAvailPhys As UIntPtr
    Public dwTotalPageFile As UIntPtr
    Public dwAvailPageFile As UIntPtr
    Public dwTotalVirtual As UIntPtr
    Public dwAvailVirtual As UIntPtr
End Structure
import ctypes
from ctypes import wintypes

class MEMORYSTATUS(ctypes.Structure):
    _fields_ = [
        ("dwLength", wintypes.DWORD),
        ("dwMemoryLoad", wintypes.DWORD),
        ("dwTotalPhys", ctypes.c_size_t),
        ("dwAvailPhys", ctypes.c_size_t),
        ("dwTotalPageFile", ctypes.c_size_t),
        ("dwAvailPageFile", ctypes.c_size_t),
        ("dwTotalVirtual", ctypes.c_size_t),
        ("dwAvailVirtual", ctypes.c_size_t),
    ]
#[repr(C)]
pub struct MEMORYSTATUS {
    pub dwLength: u32,
    pub dwMemoryLoad: u32,
    pub dwTotalPhys: usize,
    pub dwAvailPhys: usize,
    pub dwTotalPageFile: usize,
    pub dwAvailPageFile: usize,
    pub dwTotalVirtual: usize,
    pub dwAvailVirtual: usize,
}
import "golang.org/x/sys/windows"

type MEMORYSTATUS struct {
	dwLength uint32
	dwMemoryLoad uint32
	dwTotalPhys uintptr
	dwAvailPhys uintptr
	dwTotalPageFile uintptr
	dwAvailPageFile uintptr
	dwTotalVirtual uintptr
	dwAvailVirtual uintptr
}
type
  MEMORYSTATUS = record
    dwLength: DWORD;
    dwMemoryLoad: DWORD;
    dwTotalPhys: NativeUInt;
    dwAvailPhys: NativeUInt;
    dwTotalPageFile: NativeUInt;
    dwAvailPageFile: NativeUInt;
    dwTotalVirtual: NativeUInt;
    dwAvailVirtual: NativeUInt;
  end;
const MEMORYSTATUS = extern struct {
    dwLength: u32,
    dwMemoryLoad: u32,
    dwTotalPhys: usize,
    dwAvailPhys: usize,
    dwTotalPageFile: usize,
    dwAvailPageFile: usize,
    dwTotalVirtual: usize,
    dwAvailVirtual: usize,
};
type
  MEMORYSTATUS {.bycopy.} = object
    dwLength: uint32
    dwMemoryLoad: uint32
    dwTotalPhys: uint
    dwAvailPhys: uint
    dwTotalPageFile: uint
    dwAvailPageFile: uint
    dwTotalVirtual: uint
    dwAvailVirtual: uint
struct MEMORYSTATUS
{
    uint dwLength;
    uint dwMemoryLoad;
    size_t dwTotalPhys;
    size_t dwAvailPhys;
    size_t dwTotalPageFile;
    size_t dwAvailPageFile;
    size_t dwTotalVirtual;
    size_t dwAvailVirtual;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; MEMORYSTATUS サイズ: 32 バイト(x86)
dim st, 8    ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; dwLength : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwMemoryLoad : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwTotalPhys : UINT_PTR (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; dwAvailPhys : UINT_PTR (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; dwTotalPageFile : UINT_PTR (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; dwAvailPageFile : UINT_PTR (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; dwTotalVirtual : UINT_PTR (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; dwAvailVirtual : UINT_PTR (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MEMORYSTATUS サイズ: 56 バイト(x64)
dim st, 14    ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; dwLength : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwMemoryLoad : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwTotalPhys : UINT_PTR (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; dwAvailPhys : UINT_PTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; dwTotalPageFile : UINT_PTR (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; dwAvailPageFile : UINT_PTR (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; dwTotalVirtual : UINT_PTR (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; dwAvailVirtual : UINT_PTR (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global MEMORYSTATUS
    #field int dwLength
    #field int dwMemoryLoad
    #field intptr dwTotalPhys
    #field intptr dwAvailPhys
    #field intptr dwTotalPageFile
    #field intptr dwAvailPageFile
    #field intptr dwTotalVirtual
    #field intptr dwAvailVirtual
#endstruct

stdim st, MEMORYSTATUS        ; NSTRUCT 変数を確保
st->dwLength = 100
mes "dwLength=" + st->dwLength