Приведение слова к длинному слову в C - PullRequest
0 голосов
/ 03 октября 2019

Когда мы приведем unsigned int к unsigned long в C (для этого примера мы можем предположить, что целые без знака имеют длину 32 бита, а длинные без знака - 64 бита), будет ли выражение, использующее полученное значение, правильновыровнен с 8-байтовой границей?

unsigned int i  = 8;
if ((unsigned long)i == 8) // <--- is (unsigned long)i aligned properly?
{
 // do something
} 

Если изначально i выровнен с 4-байтовой границей, то при условии, что адрес приведенного значения не изменяется, (unsigned long) i не обязательновыровнен по 8-байтовой границе, хотя его длина составляет 8 байт. С другой стороны, безопасно ли предположить, что компилятор выделит какое-то новое место в стеке (временное, может быть?) Для результата приведения и, таким образом, правильно выровняет его с некоторыми дополнительными затратами?

...