Как известно, операция чтения с выровненного адреса медленнее, чем операция чтения с выровненного адреса.
Но как насчет записи данных по смещенному адресу?
По результатам следующих тестов производительность примерно одинакова
#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';
}
Но я не уверен, что тест верен, и результат записи данных по выровненному и выровненному адресу одинаков на уровне процессора. Есть ли проблемы с производительностью в этом случае?