Windows程序記憶體計算

2021-08-11 12:12:04 字數 2105 閱讀 2921

當開啟

windows

任務管理器時,就會看到每個程序使用記憶體的分布情況,往往會發現有一些程序占用大量的記憶體,這種情況也是一種異常情況,可以作為是否惡意軟體的標誌之一。下面就來使用

api函式

getprocessmemoryinfo

來獲取記憶體的使用情況。

函式getprocessmemoryinfo

宣告如下:

bool winapi getprocessmemoryinfo (

handle process,

pprocess_memory_counters ppsmemcounters,

dword cb

);process

是獲取記憶體使用情況的程序控制代碼。

ppsmemcounters

是返回記憶體使用情況的結構。

cb是結構的大小。

使用函式

getprocessmemoryinfo

獲取程式當前記憶體使用量的步驟如下:

1.在程式中新增

pragma comment(lib,"psapi.lib")

,將psapi.lib

包含進去,或者通過在工程屬性中新增

psapi.lib;

2.在系統中包含

psapi.h

檔案;

3.在需要檢視記憶體的**處新增如下**:

handle handle = getcurrentprocess();

process_memory_counters pmc;

getprocessmemoryinfo(handle,&pmc, sizeof(pmc));

printf("%d\r\n",pmc.workingsetsize);

其中pmc.workingsetsize

就是程式在當前**處的記憶體使用量。

另外,handle

也可用下面物件代替,

dword dwprcess;

handle hprocess = openprocess(process_query_information | process_vn_read, false,dwprocess);

function: 

contains the memory statistics for aprocess.

syntax:

typedef struct _process_memory_counters process_memory_counters, *pprocess_memory_counters;

cb --

size of the structure, in bytes.

pagefaultcount

-- number of page faults. 

peakworkingsetsize

-- peak working set size, in bytes. // 峰值

記憶體使用

workingsetsize

-- current working set size, inbytes.  // 

記憶體使用

quotapeakpagedpoolusage

-- peak paged pool usage, in bytes.

quotapagedpoolusage

-- current paged pool usage, inbytes.

quotapeaknonpagedpoolusage

-- peak nonpaged pool usage, inbytes.

quotanonpagedpoolusage

-- current nonpaged pool usage, inbytes.

pagefileusage

-- current space allocated for thepagefile, in bytes.those pages may or may not be in memory. // 

虛擬記憶體使用

peakpagefileusage

-- peak space allocated for thepagefile, in bytes. // 峰值

虛擬記憶體使用

Windows程序通訊 共享記憶體(二)

一 問題 1.往共享記憶體寫資料時,並不確認共享記憶體裡面的資料是否已經被處理過了 2.傳送資料大小大於共享記憶體大小時,會存在資料丟失問題 二 實現方式 1.增加乙個讀事件,如果共享記憶體裡面的資料被消費調了,則傳送該事件 2.增加傳送資料的長度,當讀取到的總資料長度等於傳送的長度時,呼叫資料處理...

Windows環境程序間通訊(二) 共享記憶體方式

共享記憶體方式是通過記憶體來傳遞資料,必須在記憶體中申請一定的空間。可以呼叫globalalloc 或者virtualallocex 來實現記憶體空間分配,使用記憶體讀寫函式 readprocessmemory 和writeprocessmemory 來讀寫程序的記憶體。要使接收程式獲得傳送程式的記...

Windows環境程序間通訊(三) 記憶體對映檔案

記憶體對映檔案是通過兩個或多個程序對映同乙個檔案對映物件的檢視來實現的,這意味著它們將共享物理儲存器的同乙個頁面。因此,當乙個程序將資料寫入乙個共享檔案對映物件的檢視時,其他程序可以立即看到它們檢視中的資料變更情況。如果多個程序共享單個檔案對映物件,那麼所有程序必須使用相同的名字來表示該檔案對映物件...