ホーム › System.SystemInformation › MEMORYSTATUS
MEMORYSTATUS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwLength | DWORD | 4 | +0 | +0 | この構造体のバイト数。呼び出し前に sizeof で設定する。 |
| dwMemoryLoad | DWORD | 4 | +4 | +4 | 物理メモリの使用率の概算。0〜100 の百分率。 |
| dwTotalPhys | UINT_PTR | 8/4 | +8 | +8 | 実装されている物理メモリの総量。バイト単位。 |
| dwAvailPhys | UINT_PTR | 8/4 | +16 | +12 | 現在利用可能な物理メモリ量。バイト単位。 |
| dwTotalPageFile | UINT_PTR | 8/4 | +24 | +16 | コミット可能なメモリの上限。バイト単位。 |
| dwAvailPageFile | UINT_PTR | 8/4 | +32 | +20 | 現在コミット可能なメモリ量。バイト単位。 |
| dwTotalVirtual | UINT_PTR | 8/4 | +40 | +24 | 呼び出し元プロセスの仮想アドレス空間の総量。バイト単位。 |
| dwAvailVirtual | UINT_PTR | 8/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 Structureimport 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: uintstruct 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