ホーム › System.Memory › WIN32_MEMORY_PARTITION_INFORMATION
WIN32_MEMORY_PARTITION_INFORMATION
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Flags | DWORD | 4 | +0 | +0 | パーティションの状態や属性を示すフラグ。 |
| NumaNode | DWORD | 4 | +4 | +4 | パーティションに関連付けられたNUMAノード番号。 |
| Channel | DWORD | 4 | +8 | +8 | メモリチャネル識別子。 |
| NumberOfNumaNodes | DWORD | 4 | +12 | +12 | パーティションが跨るNUMAノード数。 |
| ResidentAvailablePages | ULONGLONG | 8 | +16 | +16 | 常駐可能な利用可能ページ数。 |
| CommittedPages | ULONGLONG | 8 | +24 | +24 | コミット済みページ数。 |
| CommitLimit | ULONGLONG | 8 | +32 | +32 | コミット可能ページ数の上限。 |
| PeakCommitment | ULONGLONG | 8 | +40 | +40 | コミット量のピーク値(ページ数)。 |
| TotalNumberOfPages | ULONGLONG | 8 | +48 | +48 | パーティションの総ページ数。 |
| AvailablePages | ULONGLONG | 8 | +56 | +56 | 利用可能なページ数。 |
| ZeroPages | ULONGLONG | 8 | +64 | +64 | ゼロ化済みページ数。 |
| FreePages | ULONGLONG | 8 | +72 | +72 | 空きページ数。 |
| StandbyPages | ULONGLONG | 8 | +80 | +80 | スタンバイページ数。 |
| Reserved | ULONGLONG | 128 | +88 | +88 | 将来の拡張用に予約された領域。 |
| MaximumCommitLimit | ULONGLONG | 8 | +216 | +216 | コミット上限の最大値(ページ数)。 |
| Reserved2 | ULONGLONG | 8 | +224 | +224 | 将来の拡張用に予約された領域。 |
| PartitionId | DWORD | 4 | +232 | +232 | メモリパーティションを識別するID。 |
各言語での定義
#include <windows.h>
// WIN32_MEMORY_PARTITION_INFORMATION (x64 240 / x86 240 バイト)
typedef struct WIN32_MEMORY_PARTITION_INFORMATION {
DWORD Flags;
DWORD NumaNode;
DWORD Channel;
DWORD NumberOfNumaNodes;
ULONGLONG ResidentAvailablePages;
ULONGLONG CommittedPages;
ULONGLONG CommitLimit;
ULONGLONG PeakCommitment;
ULONGLONG TotalNumberOfPages;
ULONGLONG AvailablePages;
ULONGLONG ZeroPages;
ULONGLONG FreePages;
ULONGLONG StandbyPages;
ULONGLONG Reserved[16];
ULONGLONG MaximumCommitLimit;
ULONGLONG Reserved2;
DWORD PartitionId;
} WIN32_MEMORY_PARTITION_INFORMATION;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WIN32_MEMORY_PARTITION_INFORMATION
{
public uint Flags;
public uint NumaNode;
public uint Channel;
public uint NumberOfNumaNodes;
public ulong ResidentAvailablePages;
public ulong CommittedPages;
public ulong CommitLimit;
public ulong PeakCommitment;
public ulong TotalNumberOfPages;
public ulong AvailablePages;
public ulong ZeroPages;
public ulong FreePages;
public ulong StandbyPages;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public ulong[] Reserved;
public ulong MaximumCommitLimit;
public ulong Reserved2;
public uint PartitionId;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WIN32_MEMORY_PARTITION_INFORMATION
Public Flags As UInteger
Public NumaNode As UInteger
Public Channel As UInteger
Public NumberOfNumaNodes As UInteger
Public ResidentAvailablePages As ULong
Public CommittedPages As ULong
Public CommitLimit As ULong
Public PeakCommitment As ULong
Public TotalNumberOfPages As ULong
Public AvailablePages As ULong
Public ZeroPages As ULong
Public FreePages As ULong
Public StandbyPages As ULong
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public Reserved() As ULong
Public MaximumCommitLimit As ULong
Public Reserved2 As ULong
Public PartitionId As UInteger
End Structureimport ctypes
from ctypes import wintypes
class WIN32_MEMORY_PARTITION_INFORMATION(ctypes.Structure):
_fields_ = [
("Flags", wintypes.DWORD),
("NumaNode", wintypes.DWORD),
("Channel", wintypes.DWORD),
("NumberOfNumaNodes", wintypes.DWORD),
("ResidentAvailablePages", ctypes.c_ulonglong),
("CommittedPages", ctypes.c_ulonglong),
("CommitLimit", ctypes.c_ulonglong),
("PeakCommitment", ctypes.c_ulonglong),
("TotalNumberOfPages", ctypes.c_ulonglong),
("AvailablePages", ctypes.c_ulonglong),
("ZeroPages", ctypes.c_ulonglong),
("FreePages", ctypes.c_ulonglong),
("StandbyPages", ctypes.c_ulonglong),
("Reserved", ctypes.c_ulonglong * 16),
("MaximumCommitLimit", ctypes.c_ulonglong),
("Reserved2", ctypes.c_ulonglong),
("PartitionId", wintypes.DWORD),
]#[repr(C)]
pub struct WIN32_MEMORY_PARTITION_INFORMATION {
pub Flags: u32,
pub NumaNode: u32,
pub Channel: u32,
pub NumberOfNumaNodes: u32,
pub ResidentAvailablePages: u64,
pub CommittedPages: u64,
pub CommitLimit: u64,
pub PeakCommitment: u64,
pub TotalNumberOfPages: u64,
pub AvailablePages: u64,
pub ZeroPages: u64,
pub FreePages: u64,
pub StandbyPages: u64,
pub Reserved: [u64; 16],
pub MaximumCommitLimit: u64,
pub Reserved2: u64,
pub PartitionId: u32,
}import "golang.org/x/sys/windows"
type WIN32_MEMORY_PARTITION_INFORMATION struct {
Flags uint32
NumaNode uint32
Channel uint32
NumberOfNumaNodes uint32
ResidentAvailablePages uint64
CommittedPages uint64
CommitLimit uint64
PeakCommitment uint64
TotalNumberOfPages uint64
AvailablePages uint64
ZeroPages uint64
FreePages uint64
StandbyPages uint64
Reserved [16]uint64
MaximumCommitLimit uint64
Reserved2 uint64
PartitionId uint32
}type
WIN32_MEMORY_PARTITION_INFORMATION = record
Flags: DWORD;
NumaNode: DWORD;
Channel: DWORD;
NumberOfNumaNodes: DWORD;
ResidentAvailablePages: UInt64;
CommittedPages: UInt64;
CommitLimit: UInt64;
PeakCommitment: UInt64;
TotalNumberOfPages: UInt64;
AvailablePages: UInt64;
ZeroPages: UInt64;
FreePages: UInt64;
StandbyPages: UInt64;
Reserved: array[0..15] of UInt64;
MaximumCommitLimit: UInt64;
Reserved2: UInt64;
PartitionId: DWORD;
end;const WIN32_MEMORY_PARTITION_INFORMATION = extern struct {
Flags: u32,
NumaNode: u32,
Channel: u32,
NumberOfNumaNodes: u32,
ResidentAvailablePages: u64,
CommittedPages: u64,
CommitLimit: u64,
PeakCommitment: u64,
TotalNumberOfPages: u64,
AvailablePages: u64,
ZeroPages: u64,
FreePages: u64,
StandbyPages: u64,
Reserved: [16]u64,
MaximumCommitLimit: u64,
Reserved2: u64,
PartitionId: u32,
};type
WIN32_MEMORY_PARTITION_INFORMATION {.bycopy.} = object
Flags: uint32
NumaNode: uint32
Channel: uint32
NumberOfNumaNodes: uint32
ResidentAvailablePages: uint64
CommittedPages: uint64
CommitLimit: uint64
PeakCommitment: uint64
TotalNumberOfPages: uint64
AvailablePages: uint64
ZeroPages: uint64
FreePages: uint64
StandbyPages: uint64
Reserved: array[16, uint64]
MaximumCommitLimit: uint64
Reserved2: uint64
PartitionId: uint32struct WIN32_MEMORY_PARTITION_INFORMATION
{
uint Flags;
uint NumaNode;
uint Channel;
uint NumberOfNumaNodes;
ulong ResidentAvailablePages;
ulong CommittedPages;
ulong CommitLimit;
ulong PeakCommitment;
ulong TotalNumberOfPages;
ulong AvailablePages;
ulong ZeroPages;
ulong FreePages;
ulong StandbyPages;
ulong[16] Reserved;
ulong MaximumCommitLimit;
ulong Reserved2;
uint PartitionId;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WIN32_MEMORY_PARTITION_INFORMATION サイズ: 240 バイト(x64)
dim st, 60 ; 4byte整数×60(構造体サイズ 240 / 4 切り上げ)
; Flags : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; NumaNode : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; Channel : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; NumberOfNumaNodes : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; ResidentAvailablePages : ULONGLONG (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; CommittedPages : ULONGLONG (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; CommitLimit : ULONGLONG (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; PeakCommitment : ULONGLONG (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; TotalNumberOfPages : ULONGLONG (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; AvailablePages : ULONGLONG (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; ZeroPages : ULONGLONG (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; FreePages : ULONGLONG (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; StandbyPages : ULONGLONG (+80, 8byte) qpoke st,80,値 / qpeek(st,80) ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; Reserved : ULONGLONG (+88, 128byte) varptr(st)+88 を基点に操作(128byte:入れ子/配列)
; MaximumCommitLimit : ULONGLONG (+216, 8byte) qpoke st,216,値 / qpeek(st,216) ※IronHSPのみ。3.7/3.8は lpoke st,216,下位 : lpoke st,220,上位
; Reserved2 : ULONGLONG (+224, 8byte) qpoke st,224,値 / qpeek(st,224) ※IronHSPのみ。3.7/3.8は lpoke st,224,下位 : lpoke st,228,上位
; PartitionId : DWORD (+232, 4byte) st.58 = 値 / 値 = st.58 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WIN32_MEMORY_PARTITION_INFORMATION
#field int Flags
#field int NumaNode
#field int Channel
#field int NumberOfNumaNodes
#field int64 ResidentAvailablePages
#field int64 CommittedPages
#field int64 CommitLimit
#field int64 PeakCommitment
#field int64 TotalNumberOfPages
#field int64 AvailablePages
#field int64 ZeroPages
#field int64 FreePages
#field int64 StandbyPages
#field int64 Reserved 16
#field int64 MaximumCommitLimit
#field int64 Reserved2
#field int PartitionId
#endstruct
stdim st, WIN32_MEMORY_PARTITION_INFORMATION ; NSTRUCT 変数を確保
st->Flags = 100
mes "Flags=" + st->Flags