2017-02-17 35 views
-2

在C++中,我使用ReadProcessMemory來獲取某些數字的值。每個數字是串聯的,並且有五個不同的數字。執行五個單獨的RPM調用來單獨讀取每個數字會更快嗎?還是更快地執行單個RPM調用,以讀取包含這五個數字的整個結構?例如,哪個更快:多個小RPM或單結構RPM

Mem.Read<int>(DWORD64 L1); 
Mem.Read<int>(DWORD64 L1); 
Mem.Read<int>(DWORD64 L1); 
Mem.Read<int>(DWORD64 L1); 
Mem.Read<int>(DWORD64 L1); 

struct numbers{ 
    int a; 
    int b; 
    int c; 
    int d; 
    int e; 
    }; 
Mem.Read<numbers>(DWORD64 L1) 

謝謝!

+0

如果您需要在商店領取5包牛奶,那麼在那裏跑5次並且每人攜帶一個家,或者拿起全部5個並且只旅行一次會更快?如果你不得不問,你可能不應該首先調用'ReadProcessMemory'。 – IInspectable

+0

奇怪的問題。當然在這種情況下,對「ReadProcessMemory」的單個調用將比5次調用快5倍 – RbMm

+0

這個問題很糟糕。我的意思是說,對結構進行非常大的讀取或單獨的RPM調用是否更好?例如,如果我的結構的大小是幾千位,那該怎麼辦...... – anon6588

回答

0

使用ReadProcessMemory來讀取內存是「慢」,所以一個大的操作將比許多小的讀取更快。

如果我們忽略ReadProcessMemory可能是一個系統調用,必須執行上下文切換到內核模式並訪問不同進程的頁面(可能會被換頁等),您仍然可以對此進行假設一個大的速度與許多小的讀取速度。

想象一下,你正在閱讀你自己的過程。使用小緩衝區撥打memcpy的許多呼叫比一個大型複製操作要慢。只是調用一個函數有一些開銷;一個調用指令,設置堆棧,完成實際工作,然後恢復堆棧並返回。一個典型的memcpy實現通常針對較大的讀取進行優化,並且會預先做一些額外的工作以使源地址對齊,以便能夠以4或8字節的塊(可能在較新的CPU上更大)讀取大部分內存。

我通常會說,如果您不確定性能,您需要使用計時器進行測量,但在這種情況下,這是毫不費力的,只需進行單次讀取即可。