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

MEMORYSTATUS

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

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

フィールド

フィールドサイズx64x86説明
dwLengthDWORD4+0+0この構造体のバイト数。呼び出し前に sizeof で設定する。
dwMemoryLoadDWORD4+4+4物理メモリの使用率の概算。0〜100 の百分率。
dwTotalPhysUINT_PTR8/4+8+8実装されている物理メモリの総量。バイト単位。
dwAvailPhysUINT_PTR8/4+16+12現在利用可能な物理メモリ量。バイト単位。
dwTotalPageFileUINT_PTR8/4+24+16コミット可能なメモリの上限。バイト単位。
dwAvailPageFileUINT_PTR8/4+32+20現在コミット可能なメモリ量。バイト単位。
dwTotalVirtualUINT_PTR8/4+40+24呼び出し元プロセスの仮想アドレス空間の総量。バイト単位。
dwAvailVirtualUINT_PTR8/4+48+28利用可能な仮想アドレス空間量。バイト単位。

各言語での定義

#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