Size: a a a

2020 March 06

FS

Flower Surgeon in pro.cxx
Artöm Bakri Al-Sarmini
Это не так работает
Покажите, пожалуйста, где это написано. Мне неочевидно. :\
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Flower Surgeon
Покажите, пожалуйста, где это написано. Мне неочевидно. :\
Гуглить common initial sequence
источник

DS

Dmitry Sokolov in pro.cxx
Anatoly Shirokov
Нет гарантии на последовательное размещение однотипных членов данных в структуре.
Ну вот разрешено например reinterpret cast для standard layout из { int x;...} в int*. А если { int x[42];...}? Вроде как сильно похоже.
источник

FS

Flower Surgeon in pro.cxx
Artöm Bakri Al-Sarmini
Гуглить common initial sequence
Это не ответ.
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Dmitry Sokolov
Ну вот разрешено например reinterpret cast для standard layout из { int x;...} в int*. А если { int x[42];...}? Вроде как сильно похоже.
Не понял про каст
источник

DS

Dmitry Sokolov in pro.cxx
Artöm Bakri Al-Sarmini
Не понял про каст
Допускается каст к типу первого члена структуры. Т.е. паддинг перед ним запрещён.
источник

AS

Anatoly Shirokov in pro.cxx
Dmitry Sokolov
Ну вот разрешено например reinterpret cast для standard layout из { int x;...} в int*. А если { int x[42];...}? Вроде как сильно похоже.
но это ничего не доказывает.
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Flower Surgeon
Это не ответ.
> http://eel.is/c++draft/class.union#2
> One special guarantee is made in order to simplify the use of unions: If a standard-layout union contains several standard-layout structs that share a common initial sequence ([class.mem]), and if a non-static data member of an object of this standard-layout union type is active and is one of the standard-layout structs, it is permitted to inspect the common initial sequence of any of the standard-layout struct members; see [class.mem].

> http://eel.is/c++draft/class.prop#3
> A class S is a standard-layout class if it: <bla-bla>

> http://eel.is/c++draft/class.mem#22
> The common initial sequence of two standard-layout struct ([class.prop]) types is the longest sequence of non-static data members and bit-fields in declaration order, starting with the first such entity in each of the structs, such that corresponding entities have layout-compatible types, either both entities are declared with the no_­unique_­address attribute ([dcl.attr.nouniqueaddr]) or neither is, and either both entities are bit-fields with the same width or neither is a bit-field.
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Dmitry Sokolov
Допускается каст к типу первого члена структуры. Т.е. паддинг перед ним запрещён.
А между полями не зпрещен, я гарантии не нашел
источник

AS

Anatoly Shirokov in pro.cxx
Dmitry Sokolov
Допускается каст к типу первого члена структуры. Т.е. паддинг перед ним запрещён.
возможный лэйаут:
struct {int a; int b; int c;} // AAAAPPPPBBBBPPPPCCCCPPPP
источник

AS

Anatoly Shirokov in pro.cxx
тогда как
int arr[3]; //AAAABBBBCCCC
источник

AS

Anatoly Shirokov in pro.cxx
@iquadtree иллюстрация к твоему union-у ^
источник

P

Pepe 🐸 in pro.cxx
Flower Surgeon
структура из шорта и чара?
паддинг будет
источник

FS

Flower Surgeon in pro.cxx
Pepe 🐸
паддинг будет
ну да, это понятно, там уже вопрос закрыт
источник

FS

Flower Surgeon in pro.cxx
Anatoly Shirokov
@iquadtree иллюстрация к твоему union-у ^
спасибо, так намного понятнее
источник

P

Pepe 🐸 in pro.cxx
Dmitry Sokolov
Не, хочется совсем плохого. Структуру со счётчиками пушить в инстанс с атоимик счётчиками зная только их число.
byte можно
источник

P

Pepe 🐸 in pro.cxx
Flower Surgeon
Не будет там UB
а это кстати интересный вопрос, формально типы разные, но лэйаут одинаковый. В этом случае strict aliasing работает или нет?
источник

FS

Flower Surgeon in pro.cxx
Anatoly Shirokov
возможный лэйаут:
struct {int a; int b; int c;} // AAAAPPPPBBBBPPPPCCCCPPPP
не совсем понятно зачем там такой паддинг. Поизучаю матчасть, пожалуй.
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Pepe 🐸
а это кстати интересный вопрос, формально типы разные, но лэйаут одинаковый. В этом случае strict aliasing работает или нет?
Алиасинг тут ни при чем, там речь про юнион
источник

P

Pepe 🐸 in pro.cxx
Artöm Bakri Al-Sarmini
Алиасинг тут ни при чем, там речь про юнион
нет, тайп punning это и есть aliasing
источник