Winapi 哪个更快:多个小RPM还是单结构RPM 在C++中,我使用RealPosialMead获取一些数字的值。每个数字是串联的,有五个不同的数字。执行五个单独的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); Mem.Read(DWORD64 L1); 内存读取(DWORD64 L1); 内存读取(DWORD64 L1); 内存读取(DWORD64 L1); 内存读取(DWORD64 L1);

Winapi 哪个更快:多个小RPM还是单结构RPM 在C++中,我使用RealPosialMead获取一些数字的值。每个数字是串联的,有五个不同的数字。执行五个单独的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); Mem.Read(DWORD64 L1); 内存读取(DWORD64 L1); 内存读取(DWORD64 L1); 内存读取(DWORD64 L1); 内存读取(DWORD64 L1);,winapi,Winapi,或 结构编号{ INTA; int b; INTC; int d; INTE; }; 内存读取(DWORD64 L1) 谢谢 使用ReadProcessMemory读取内存是“慢”的,因此一个大的操作要比许多小的读取快 如果我们忽略ReadProcessMemory可能是一个系统调用,它必须执行上下文切换到内核模式并访问不同进程的页面(可能被分页等),那么您仍然可以对一次大读取与多次小读取的速度做出假设 想象你正在阅读自己的过程。使用小缓冲区对memcpy的许多调用都比一个大复制操作慢。仅仅调

结构编号{
INTA;
int b;
INTC;
int d;
INTE;
};
内存读取(DWORD64 L1)

谢谢

使用
ReadProcessMemory
读取内存是“慢”的,因此一个大的操作要比许多小的读取快

如果我们忽略
ReadProcessMemory
可能是一个系统调用,它必须执行上下文切换到内核模式并访问不同进程的页面(可能被分页等),那么您仍然可以对一次大读取与多次小读取的速度做出假设

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


我通常会说,如果你对性能不确定,你需要用计时器进行测量,但在这种情况下,这是一件很简单的事情,只需进行一次读数。

如果你需要在商店里买5包牛奶,跑5次然后每人带一包回家会更快吗?如果必须提问,您可能不应该首先调用
ReadProcessMemory
。奇怪的问题。当然,在这种情况下,对
ReadProcessMemory
的一次调用将比5次调用快5倍。这个问题措词不当。我的意思是说,对一个结构进行非常大的读取还是单独的RPM调用更好?例如,如果我的结构是几千位的话会怎样呢……计时器。听说过吗?使用一个,并做自己的测试。请注意,Windows会抢先执行多个任务,因此为了获得合理准确的数据,您需要执行循环,在循环中,您将多次执行每个任务以获得平均值。例如,1000或10000次执行5次读取,然后将总时间除以循环计数。接下来,对1个较大的读取执行相同的操作-在划分总时间之前,在循环中执行它数千次。有很多有用的信息——我只想简单概述一下这个过程。做你自己的研究和计时。如果你需要阅读“几千位”(不符合“非常大”),你需要阅读几千位。在一个系统调用中执行此操作比在每个系统调用中执行数千个调用来读取单个字节要快。
struct numbers{
   int a;
   int b;
   int c;
   int d;
   int e;
  };
Mem.Read<numbers>(DWORD64 L1)