在C ++中,我使用ReadProcessMemory来获取某些数字的值。每个数字是串联的,有五个不同的数字。执行五个单个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 :(得分:0)
使用ReadProcessMemory
读取内存的速度很慢&#34;因此,一项大型操作将比许多小型操作更快。
如果我们忽略了ReadProcessMemory
可能是系统调用这一事实,它必须执行上下文切换到内核模式并访问不同进程的页面(可能被分页等),你仍然可以关于一个大的读数和许多小读数的速度的假设。
想象一下,你正在阅读自己的过程。许多使用小缓冲区调用memcpy
比使用大型复制操作慢。只是调用一个函数有一些开销;调用指令,设置堆栈,执行实际工作,然后恢复堆栈并返回。典型的memcpy
实现通常针对较大的读取进行优化,并且会预先做一些额外的工作以使源地址对齐,以便它可以以4或8字节块的形式读取大部分内存(在较新的CPU上可能更大) )。
我通常会说如果你不确定性能,你需要用计时器进行测量,但在这种情况下,这是一个明智的选择,只需进行单次读取。