從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