Рассмотрим следующий код:Unaligned доступ к памяти: определено ли это поведение или нет?
#include <iostream>
int main()
{
char* c = new char('a');
char ac[4] = {'a', 'b', 'c', 'd'};
unsigned long long int* u = reinterpret_cast<unsigned long long int*>(c);
unsigned long long int* uc = reinterpret_cast<unsigned long long int*>(&ac[3]);
*u = 42;
*uc = 42;
std::cout<<*u<<" "<<*uc<<std::endl;
}
ли это рассматривать как действительный код, или это утечка памяти/неопределенное поведение? Я спрашиваю, потому что через:
*u = 42;
*uc = 42;
мы доступа байт, которые не должны быть доступны в программе (я думаю).
Ищите нестандартное ключевое слово, поддерживаемое вашим компилятором, что-то похожее на '__packed' или' __unaligned'. –
Вы изменяете память, к которой у вас не должно быть доступа. Таким образом, я не думаю, что это важно, находится ли он на границе слова. –