Записать данные на смещенный адрес - PullRequest
0 голосов
/ 01 июля 2018

Как известно, операция чтения с выровненного адреса медленнее, чем операция чтения с выровненного адреса. Но как насчет записи данных по смещенному адресу?

По результатам следующих тестов производительность примерно одинакова

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

Но я не уверен, что тест верен, и результат записи данных по выровненному и выровненному адресу одинаков на уровне процессора. Есть ли проблемы с производительностью в этом случае?

...