указатель на 8байтный (64-битный) значение может указывать на ячейку памяти не кратное 8?

168
11 декабря 2018, 03:00

можно ли писать такой код:

uint8_t a[SOME_COUNT];
int main()
{
    uint64_t *t = (uint64_t *)a;    // c-style я знаю
    /* some code*/
}

указатель на 8байтный (64-битный) значение может указывать на ячейку памяти не кратное 8?

Answer 1

указывать может, но формально это undefined behavior. по стандарту, несвязанные типы указателей можно кастовать только к char*.

логически объясняется тем, что это мешает оптимизиациям и на некоторых платформах могут возникать проблемы при доступе к невыровненным данным.

но т.к. подобного кода написано достаточно много, то например в gcc есть параметр -fno-strict-aliasing

READ ALSO
Получить смещение из указателя на член

Получить смещение из указателя на член

Есть указатель на член, нужно получить числовое представление этого адреса, иными словами смещениеВ коде вот так:

133
Настройка отладчика под macos в QtCreator

Настройка отладчика под macos в QtCreator

Ранее пользовался Linux/Ubuntu и не было ни каких проблем с отладкой (использовался gcc + gdb)Сейчас перешел на MacOS и появилась большая проблема

122
Ошибка при выполнении функции во время работы JavaFX

Ошибка при выполнении функции во время работы JavaFX

Не могу понять в чём ошибка пробовал различные способы менял структуру нечего не помогает,после моих попыток я смог только задержать ошибку...

194