从C++中的任意内存地址读取UInt32值的最有效方法是什么? (假设Windows x86或Windows x64体系结构)。从任何内存地址读取UInt32的最有效方法?
例如,考虑将指向内存某处的字节指针指向包含ints,string数据等所有混合在一起的block。以下示例显示了从循环中读取此块中的各个字段。
typedef unsigned char* BytePtr;
typedef unsigned int UInt32;
...
BytePtr pCurrent = ...;
while (*pCurrent != 0)
{
...
if (*pCurrent == ...)
{
UInt32 nValue = *((UInt32*) (pCurrent + 1)); // line A
...
}
pCurrent += ...;
}
如果在线路A
,pPtr
恰好包含一个4字节对齐地址时,读取该UInt32的应是一个单一的存储器中读出。如果pPtr
包含一个不对齐的地址,我需要多于一个的内存周期,这会减慢代码的速度。有没有更快的方法来读取非对齐地址的值?
谢谢 - 我必须承认,我不知道严格的锯齿规则。这也解释了其他答案。我使用的是VC++和x86/x64,所以在这种情况下,可移植性并不是问题。由于其他原因,大部分代码都与硬件有关。 –
xxbbcc