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

PROCESS_MEMORY_COUNTERS

構造体
サイズx64: 72 バイト / x86: 40 バイト

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

フィールド

フィールドサイズx64x86説明
cbDWORD4+0+0この構造体のサイズ。バイト数で呼び出し前に設定する。
PageFaultCountDWORD4+4+4発生したページフォルトの累積回数。
PeakWorkingSetSizeUINT_PTR8/4+8+8ワーキングセットサイズのピーク値。バイト数で表す。
WorkingSetSizeUINT_PTR8/4+16+12現在のワーキングセットサイズ。バイト数で表す。
QuotaPeakPagedPoolUsageUINT_PTR8/4+24+16ページプールクォータ使用量のピーク値。バイト数。
QuotaPagedPoolUsageUINT_PTR8/4+32+20現在のページプールクォータ使用量。バイト数で表す。
QuotaPeakNonPagedPoolUsageUINT_PTR8/4+40+24非ページプールクォータ使用量のピーク値。バイト数。
QuotaNonPagedPoolUsageUINT_PTR8/4+48+28現在の非ページプールクォータ使用量。バイト数で表す。
PagefileUsageUINT_PTR8/4+56+32ページファイルにコミットされた使用量。バイト数で表す。
PeakPagefileUsageUINT_PTR8/4+64+36ページファイル使用量のピーク値。バイト数で表す。

各言語での定義

#include <windows.h>

// PROCESS_MEMORY_COUNTERS  (x64 72 / x86 40 バイト)
typedef struct PROCESS_MEMORY_COUNTERS {
    DWORD cb;
    DWORD PageFaultCount;
    UINT_PTR PeakWorkingSetSize;
    UINT_PTR WorkingSetSize;
    UINT_PTR QuotaPeakPagedPoolUsage;
    UINT_PTR QuotaPagedPoolUsage;
    UINT_PTR QuotaPeakNonPagedPoolUsage;
    UINT_PTR QuotaNonPagedPoolUsage;
    UINT_PTR PagefileUsage;
    UINT_PTR PeakPagefileUsage;
} PROCESS_MEMORY_COUNTERS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PROCESS_MEMORY_COUNTERS
{
    public uint cb;
    public uint PageFaultCount;
    public UIntPtr PeakWorkingSetSize;
    public UIntPtr WorkingSetSize;
    public UIntPtr QuotaPeakPagedPoolUsage;
    public UIntPtr QuotaPagedPoolUsage;
    public UIntPtr QuotaPeakNonPagedPoolUsage;
    public UIntPtr QuotaNonPagedPoolUsage;
    public UIntPtr PagefileUsage;
    public UIntPtr PeakPagefileUsage;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PROCESS_MEMORY_COUNTERS
    Public cb As UInteger
    Public PageFaultCount As UInteger
    Public PeakWorkingSetSize As UIntPtr
    Public WorkingSetSize As UIntPtr
    Public QuotaPeakPagedPoolUsage As UIntPtr
    Public QuotaPagedPoolUsage As UIntPtr
    Public QuotaPeakNonPagedPoolUsage As UIntPtr
    Public QuotaNonPagedPoolUsage As UIntPtr
    Public PagefileUsage As UIntPtr
    Public PeakPagefileUsage As UIntPtr
End Structure
import ctypes
from ctypes import wintypes

class PROCESS_MEMORY_COUNTERS(ctypes.Structure):
    _fields_ = [
        ("cb", wintypes.DWORD),
        ("PageFaultCount", wintypes.DWORD),
        ("PeakWorkingSetSize", ctypes.c_size_t),
        ("WorkingSetSize", ctypes.c_size_t),
        ("QuotaPeakPagedPoolUsage", ctypes.c_size_t),
        ("QuotaPagedPoolUsage", ctypes.c_size_t),
        ("QuotaPeakNonPagedPoolUsage", ctypes.c_size_t),
        ("QuotaNonPagedPoolUsage", ctypes.c_size_t),
        ("PagefileUsage", ctypes.c_size_t),
        ("PeakPagefileUsage", ctypes.c_size_t),
    ]
#[repr(C)]
pub struct PROCESS_MEMORY_COUNTERS {
    pub cb: u32,
    pub PageFaultCount: u32,
    pub PeakWorkingSetSize: usize,
    pub WorkingSetSize: usize,
    pub QuotaPeakPagedPoolUsage: usize,
    pub QuotaPagedPoolUsage: usize,
    pub QuotaPeakNonPagedPoolUsage: usize,
    pub QuotaNonPagedPoolUsage: usize,
    pub PagefileUsage: usize,
    pub PeakPagefileUsage: usize,
}
import "golang.org/x/sys/windows"

type PROCESS_MEMORY_COUNTERS struct {
	cb uint32
	PageFaultCount uint32
	PeakWorkingSetSize uintptr
	WorkingSetSize uintptr
	QuotaPeakPagedPoolUsage uintptr
	QuotaPagedPoolUsage uintptr
	QuotaPeakNonPagedPoolUsage uintptr
	QuotaNonPagedPoolUsage uintptr
	PagefileUsage uintptr
	PeakPagefileUsage uintptr
}
type
  PROCESS_MEMORY_COUNTERS = record
    cb: DWORD;
    PageFaultCount: DWORD;
    PeakWorkingSetSize: NativeUInt;
    WorkingSetSize: NativeUInt;
    QuotaPeakPagedPoolUsage: NativeUInt;
    QuotaPagedPoolUsage: NativeUInt;
    QuotaPeakNonPagedPoolUsage: NativeUInt;
    QuotaNonPagedPoolUsage: NativeUInt;
    PagefileUsage: NativeUInt;
    PeakPagefileUsage: NativeUInt;
  end;
const PROCESS_MEMORY_COUNTERS = extern struct {
    cb: u32,
    PageFaultCount: u32,
    PeakWorkingSetSize: usize,
    WorkingSetSize: usize,
    QuotaPeakPagedPoolUsage: usize,
    QuotaPagedPoolUsage: usize,
    QuotaPeakNonPagedPoolUsage: usize,
    QuotaNonPagedPoolUsage: usize,
    PagefileUsage: usize,
    PeakPagefileUsage: usize,
};
type
  PROCESS_MEMORY_COUNTERS {.bycopy.} = object
    cb: uint32
    PageFaultCount: uint32
    PeakWorkingSetSize: uint
    WorkingSetSize: uint
    QuotaPeakPagedPoolUsage: uint
    QuotaPagedPoolUsage: uint
    QuotaPeakNonPagedPoolUsage: uint
    QuotaNonPagedPoolUsage: uint
    PagefileUsage: uint
    PeakPagefileUsage: uint
struct PROCESS_MEMORY_COUNTERS
{
    uint cb;
    uint PageFaultCount;
    size_t PeakWorkingSetSize;
    size_t WorkingSetSize;
    size_t QuotaPeakPagedPoolUsage;
    size_t QuotaPagedPoolUsage;
    size_t QuotaPeakNonPagedPoolUsage;
    size_t QuotaNonPagedPoolUsage;
    size_t PagefileUsage;
    size_t PeakPagefileUsage;
}

HSP用 定義

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

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

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