将数据写入未对齐的地址

时间:2018-07-01 10:58:15

标签: c++ memory memory-alignment

众所周知,从未对齐地址的读取操作要比从对齐地址的读取操作慢。 但是数据写入未对齐的地址怎么办?

根据以下测试的结果,性能大致相同

#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';
}

但是我不确定测试是否正确,并且在处理器级别将数据写入未对齐和对齐的地址的结果是否相同。在这种情况下是否存在性能问题?

0 个答案:

没有答案