Size: a a a

2020 July 08

AN

Alexander N in pro.cxx
type punning не позволяет не?
источник

P

Pepe 🐸 in pro.cxx
Alexander N
type punning не позволяет не?
стандарт не позволяет по моему да
источник

P

Pepe 🐸 in pro.cxx
это первый мой вопрос. что я ничего не упускаю. Второй, это реально что такое бомбанет на gcc или clang?
источник

v

vehlwn in pro.cxx
Pepe 🐸
это первый мой вопрос. что я ничего не упускаю. Второй, это реально что такое бомбанет на gcc или clang?
Ты уже разыменовал const int64_t*?
источник

v

vehlwn in pro.cxx
Pepe 🐸
а реально может сегфолтнуть? а то меня убеждают что это все теория
Прочитай где угодно про strict aliasing, узнаешь.
источник

P

Pepe 🐸 in pro.cxx
vehlwn
Ты уже разыменовал const int64_t*?
нет еще, но возможно его разыменуют
источник

P

Pepe 🐸 in pro.cxx
vehlwn
Прочитай где угодно про strict aliasing, узнаешь.
я в курсе, как раз на cppreference читаю, хочу просто узнать это теоретическая возможность или реальная
источник

v

vehlwn in pro.cxx
Pepe 🐸
я в курсе, как раз на cppreference читаю, хочу просто узнать это теоретическая возможность или реальная
Как уб может быть нереальным? Это же не разыменование нулл поинтер валуева. Кстати какое значение у тебя в uint8_t*?
источник

VS

Vlad Serebrennikov in pro.cxx
Pepe 🐸
а реально может сегфолтнуть? а то меня убеждают что это все теория
да, если операция над этим указателем требует выравненного (aligned) адреса
источник

VS

Vlad Serebrennikov in pro.cxx
на уровне машинного кода
источник

VS

Vlad Serebrennikov in pro.cxx
For example, on ARM, there is LDRD instruction, which needs aligned memory address.
источник

P

Pepe 🐸 in pro.cxx
Vlad Serebrennikov
For example, on ARM, there is LDRD instruction, which needs aligned memory address.
спасибо
источник

VS

Vlad Serebrennikov in pro.cxx
причем сегфолтить будет в 87,5% случаев
источник

P

Pepe 🐸 in pro.cxx
Vlad Serebrennikov
For example, on ARM, there is LDRD instruction, which needs aligned memory address.
а что если было аллоцировано с помощью malloc? Тогда выравнивание годится для любого типа
источник

VS

Vlad Serebrennikov in pro.cxx
именно по этой причине
источник

m

magras in pro.cxx
vehlwn
Прочитай где угодно про strict aliasing, узнаешь.
Кажется в случае
static_assert(std::is_same_v<uint8_t, unsigned char>);

проблем с aliasing'ом нет. Я вижу только потенциальные проблемы со временем жизни.
источник

P

Pepe 🐸 in pro.cxx
magras
Кажется в случае
static_assert(std::is_same_v<uint8_t, unsigned char>);

проблем с aliasing'ом нет. Я вижу только потенциальные проблемы со временем жизни.
да но тут int64
источник

v

vehlwn in pro.cxx
magras
Кажется в случае
static_assert(std::is_same_v<uint8_t, unsigned char>);

проблем с aliasing'ом нет. Я вижу только потенциальные проблемы со временем жизни.
Да, но в вопросе автора не было никаких гарантий про uint8.
источник

m

magras in pro.cxx
vehlwn
Да, но в вопросе автора не было никаких гарантий про uint8.
источник

m

magras in pro.cxx
magras
Кажется в случае
static_assert(std::is_same_v<uint8_t, unsigned char>);

проблем с aliasing'ом нет. Я вижу только потенциальные проблемы со временем жизни.
Ну и с выравниванием в этом случае тоже не будет проблем.
источник