ホーム › System.SystemInformation › MEMORYSTATUS
MEMORYSTATUS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwLength | DWORD | 4 | +0 | +0 | MEMORYSTATUS データ構造体のサイズ (バイト単位)。 GlobalMemoryStatus 関数を呼び出す前にこのメンバーを設定する必要はありません。関数が設定します。 |
| dwMemoryLoad | DWORD | 4 | +4 | +4 | 使用中の物理メモリのおおよその割合 (パーセント) を指定する 0 から 100 までの数値です (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 | 現在のプロセスがコミットできるメモリの最大量 (バイト単位)。この値はシステム全体の利用可能なコミット量よりも小さくなります。この値を算出するには、GetPerformanceInfo を呼び出し、CommitLimit から CommitTotal の値を引きます。 |
| dwTotalVirtual | UINT_PTR | 8/4 | +40 | +24 | 呼び出し元プロセスの仮想アドレス空間のうち、ユーザー モード部分のサイズ (バイト単位)。この値は、プロセスの種類、プロセッサの種類、およびオペレーティング システムの構成によって異なります。たとえば、この値は x86 プロセッサ上のほとんどの 32 ビット プロセスでは約 2 GB、4 GT RAM チューニングが有効なシステムで実行されるラージ アドレス対応の 32 ビット プロセスでは約 3 GB になります。 |
| dwAvailVirtual | UINT_PTR | 8/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)
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 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