我有一些代码,可以从任意地址的字节数组中解释多字节宽度整数。
std::vector<uint8> m_data; // filled with data
uint32 pos = 13; // position that might not be aligned well for 8 byte integers
...
uint64 * ptr = reinterpret_cast<uint64*>(m_data.data() + pos);
*ptr = swap64(*ptr); // (swaps endianness)
这段代码是否有对齐问题?如果有,那么这是一个严重的问题吗,还是可以忽略因为惩罚很小?
pos
始终可被8整除(或更准确地说,data+pos可被8整除),则对于错误对齐不会有惩罚。但我使用SPD。请测量它并将其与将数据复制到临时变量中的成本进行比较。此外,在某些旧平台上(例如sun sparc),在错误对齐的地址上访问变量会导致崩溃。但我相信大多数平台芯片+操作系统在发生这种情况时会进行适当的修复。那个修复的成本是未知的。请测量它。 - selbie