Size: a a a

2020 June 05

SK

Stas Koynov in pro.cxx
Stas Koynov
и то и другое. в новых армах даже в милипизерных v7-m кортекс-м3 невыровненный доступ есть!
правда атомики через LDREX требуют конечно выровненный доступ
источник

AY

Alexey Yunushkin in pro.cxx
Stas Koynov
и то и другое. в новых армах даже в милипизерных v7-m кортекс-м3 невыровненный доступ есть!
почитайте мою ссылку на kernel.org. доступ есть но могут быть проблемы с производительностью поэтому SIGBUS)
источник

SK

Stas Koynov in pro.cxx
Alexey Yunushkin
почитайте мою ссылку на kernel.org. доступ есть но могут быть проблемы с производительностью поэтому SIGBUS)
ну тут просто для скорости сделали, по идее правильно. Вопрос чтоб закрыть тему. если в той структуре добавить атрибут упаковки. компилятор бы при обращении к полям работал бы как с union тобишь все сам делал?
источник

IZ

Ilia Zviagin in pro.cxx
Олег Беляев
Не успел пройти анти-бот проверку, теперь не пускает (
Пробуй
источник

AY

Alexey Yunushkin in pro.cxx
Stas Koynov
ну тут просто для скорости сделали, по идее правильно. Вопрос чтоб закрыть тему. если в той структуре добавить атрибут упаковки. компилятор бы при обращении к полям работал бы как с union тобишь все сам делал?
да pack 1, битовых полей не было архитектура одно и таже be/le и все uint32_t etc не union и SIGBUS) И к слову в shmem.
источник

SK

Stas Koynov in pro.cxx
Alexey Yunushkin
да pack 1, битовых полей не было архитектура одно и таже be/le и все uint32_t etc не union и SIGBUS) И к слову в shmem.
ок спасибо
источник

OS

Oleksandr Senkovych in pro.cxx
Ну на 86 тоже можно похожее словить если внезапно компилятор захочет добавить avx инструкции
источник

OS

Oleksandr Senkovych in pro.cxx
поэтому либо выравниваешь буфер либо делаешь packed
источник

OS

Oleksandr Senkovych in pro.cxx
но здесь проблема не втом что УБ из-за lifetime, а из-за плохого выравнивания. Такое же можно словить с валидным lifetime-ом
источник

AT

Anatoly Tomilov in pro.cxx
вы имеете ввиду pragma packed на тип структуры? А он приведёт к тому, что будут (безусловно) сгенерированы unaligned версии инструкций для доступа к полям структуры?
источник

OS

Oleksandr Senkovych in pro.cxx
Anatoly Tomilov
вы имеете ввиду pragma packed на тип структуры? А он приведёт к тому, что будут (безусловно) сгенерированы unaligned версии инструкций для доступа к полям структуры?
именно. поэтому существует еще std::aligned_storage
источник

OS

Oleksandr Senkovych in pro.cxx
т.е. если хочется запилить свой вектор то нужно чтоб место было не просто char buffer[size]
источник

AT

Anatoly Tomilov in pro.cxx
я думаю, что pragma pack не повлияет на общий alignment структуры. Допустим для структуры struct { uint32_t, uint8_t, uint32_t, uint8_t, uint32_t, uint8_t, uint32_t, uint8_t, uint32_t } последний uint32_t будет выровнен на 4 байта и это будет учитываться компилятором. Общий alignment структуры под pragma pack(1) останется ведь отличным от единицы?
источник

OS

Oleksandr Senkovych in pro.cxx
pragma pack делает align равным 1
источник

AT

Anatoly Tomilov in pro.cxx
буду знать
источник

OS

Oleksandr Senkovych in pro.cxx
источник

OS

Oleksandr Senkovych in pro.cxx
я буду лучше говорить attribute packed т.к. использую gcc, я не писал под msvc никогда
источник

OS

Oleksandr Senkovych in pro.cxx
надеюсь там то же самое
источник

AT

Anatoly Tomilov in pro.cxx
так pragma pack — она везде вообще (как и once, к примеру)
источник

OS

Oleksandr Senkovych in pro.cxx
источник