哪个更快:多个小RPM或单结构RPM

时间:2017-02-17 13:04:25

标签: winapi

在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)

谢谢!

1 个答案:

答案 0 :(得分:0)

使用ReadProcessMemory读取内存的速度很慢&#34;因此,一项大型操作将比许多小型操作更快。

如果我们忽略了ReadProcessMemory可能是系统调用这一事实,它必须执行上下文切换到内核模式并访问不同进程的页面(可能被分页等),你仍然可以关于一个大的读数和许多小读数的速度的假设。

想象一下,你正在阅读自己的过程。许多使用小缓冲区调用memcpy比使用大型复制操作慢。只是调用一个函数有一些开销;调用指令,设置堆栈,执行实际工作,然后恢复堆栈并返回。典型的memcpy实现通常针对较大的读取进行优化,并且会预先做一些额外的工作以使源地址对齐,以便它可以以4或8字节块的形式读取大部分内存(在较新的CPU上可能更大) )。

我通常会说如果你不确定性能,你需要用计时器进行测量,但在这种情况下,这是一个明智的选择,只需进行单次读取。