2017-02-17 37 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上更大)读取大部分内存。

我通常会说,如果您不确定性能,您需要使用计时器进行测量,但在这种情况下,这是毫不费力的,只需进行单次读取即可。