Каков наиболее эффективный способ чтения значения UInt32 с произвольного адреса памяти в C ++? (Предполагая архитектуру Windows x86 или Windows x64.)
Например, рассмотрим наличие байтового указателя, который указывает где-то в памяти на блок, который содержит комбинацию целых чисел, строковых данных и т. Д., Все вместе. В следующем примере показано чтение различных полей из этого блока в цикле.
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
содержит невыровненный адрес, может потребоваться более одного цикла памяти, что замедляет код. Есть ли более быстрый способ считывания значения с невыровненных адресов?