众所周知,从未对齐地址的读取操作要比从对齐地址的读取操作慢。 但是将数据写入未对齐的地址怎么办?
根据以下测试的结果,性能大致相同
#include <iostream>
#include <chrono>
#include <limits>
int main()
{
char *number = new char[sizeof(unsigned int) + 1];
++number;//misaligned address
unsigned int *n = reinterpret_cast<unsigned int*>(number);
*n = 0;
unsigned int divisor;
std::cin >> divisor;
auto start = std::chrono::steady_clock::now();
for (unsigned int i = 0; i < std::numeric_limits<unsigned int>::max() / divisor; i++) {
*n = i;
}
auto end = std::chrono::steady_clock::now();
std::cout << *n << '\n';
std::cout << (end - start).count() << '\n';
}
但是我不确定测试是否正确,并且在处理器级别将数据写入未对齐和对齐的地址的结果是否相同。在这种情况下是否存在性能问题?