Size: a a a

2020 June 08

VO

Vyacheslav Olkhovche... in pro.cxx
Igor Akhmetov
Стандарт почти ничего не определяет про паковку битовых полей, она implementation defined. Выше дал пример, неужели сложно посмотреть?
я не понимаю что ты там хочешь показать. Там мало того что плюсы так еще и темплейт непонятно от чего
источник

IA

Igor Akhmetov in pro.cxx
Vyacheslav Olkhovchenkov
я не понимаю что ты там хочешь показать. Там мало того что плюсы так еще и темплейт непонятно от чего
Шаблон там чтобы показать что размер у структур разный. Чат у нас про C++, но в C это тоже implementation defined. An implementation may allocate any addressable storage unit large enough to hold a bitfield. If enough space remains, a bit-field that immediately follows another bit-field in a structure shall be packed into adjacent bits of the same unit. If insufficient space remains, whether a bit-field that does not fit is put into the next unit or overlaps adjacent units is implementation-defined.
источник

IZ

Ilia Zviagin in pro.cxx
Vyacheslav Olkhovchenkov
я не понимаю что ты там хочешь показать. Там мало того что плюсы так еще и темплейт непонятно от чего
Простая идея же: нужна сериализация -- ПИШИ ЕЁ ЯВНО , что тут не ясно-то?
источник

VO

Vyacheslav Olkhovche... in pro.cxx
Igor Akhmetov
Шаблон там чтобы показать что размер у структур разный. Чат у нас про C++, но в C это тоже implementation defined. An implementation may allocate any addressable storage unit large enough to hold a bitfield. If enough space remains, a bit-field that immediately follows another bit-field in a structure shall be packed into adjacent bits of the same unit. If insufficient space remains, whether a bit-field that does not fit is put into the next unit or overlaps adjacent units is implementation-defined.
Там шаблон со структурой не связан
источник

АК

Александр Караев... in pro.cxx
Vyacheslav Olkhovchenkov
Там шаблон со структурой не связан
Шаблон использовался для того, чтобы во время компиляции напечатать sizeof(S), не запуская программу
источник

VO

Vyacheslav Olkhovche... in pro.cxx
Igor Akhmetov
Шаблон там чтобы показать что размер у структур разный. Чат у нас про C++, но в C это тоже implementation defined. An implementation may allocate any addressable storage unit large enough to hold a bitfield. If enough space remains, a bit-field that immediately follows another bit-field in a structure shall be packed into adjacent bits of the same unit. If insufficient space remains, whether a bit-field that does not fit is put into the next unit or overlaps adjacent units is implementation-defined.
Ну ведь все однозначно же написанно
источник

АК

Александр Караев... in pro.cxx
У clang 10: sizeof(S) == 2
У msvc 19: sizeof(S) == 5
источник

VO

Vyacheslav Olkhovche... in pro.cxx
Ilia Zviagin
Простая идея же: нужна сериализация -- ПИШИ ЕЁ ЯВНО , что тут не ясно-то?
Ну давай напиши так работу с ip пакетами например, а потом посмотри во сколько раз все замедлится
источник

VO

Vyacheslav Olkhovche... in pro.cxx
Александр Караев
У clang 10: sizeof(S) == 2
У msvc 19: sizeof(S) == 5
Я не понимаю, это какой S? Который инт и боол? Так не бывает
источник

АК

Александр Караев... in pro.cxx
Vyacheslav Olkhovchenkov
Я не понимаю, это какой S? Который инт и боол? Так не бывает
Я взял код по ссылке @igor_akhmetov.

#pragma pack(push, 1)
struct S
{
 int a : 8;
 bool b : 1;
};
#pragma pack(pop)


У clang 10: sizeof(S) == 2
У msvc 19: sizeof(S) == 5
источник

VO

Vyacheslav Olkhovche... in pro.cxx
А, заметил там 8. расположение битов там будет одинаковое. Мсвц оставит больше пустого места.
источник

АК

Александр Караев... in pro.cxx
Vyacheslav Olkhovchenkov
А, заметил там 8. расположение битов там будет одинаковое. Мсвц оставит больше пустого места.
сомневаюсь.
скорее так:
clang - [aaaaaaaa; b.......]
msvc - [aaaaaaaa; ........; ........; ........; b.......]
источник

VO

Vyacheslav Olkhovche... in pro.cxx
Напиши код который обращается к полям
источник

IZ

Ilia Zviagin in pro.cxx
Vyacheslav Olkhovchenkov
Ну давай напиши так работу с ip пакетами например, а потом посмотри во сколько раз все замедлится
Ну, так и пишу...
источник

АК

Александр Караев... in pro.cxx
Vyacheslav Olkhovchenkov
Напиши код который обращается к полям
bool f(S s) {
   return s.b;
}

clang:
mov     eax, edi
shr     eax, 8
and     eax, 1
ret
(забрал нулевой бит 1-го байта)

msvc:
movzx   eax, BYTE PTR [rcx+4]
and     al, 1
ret     0
(забрал нулевой бит 4-го байта)
источник

АК

Александр Караев... in pro.cxx
Александр Караев
сомневаюсь.
скорее так:
clang - [aaaaaaaa; b.......]
msvc - [aaaaaaaa; ........; ........; ........; b.......]
^ согласуется с моим представлением
источник

SS

Serhii Strarodumov in pro.cxx
Здраствуйте, может вопрос скорее касательно новичков но меня это очень удивило. Сегодня увидил в С++ коде такое "if (n==12 or n==11)". Вопрос. Когда операторы || и && можно стало заменять на or или and?? и вообще по стандарту ли это? Никогда такого за 2 года разработки не видел. Компилятор GCC, С++17. Самое интересное что код копилируется и делает все как и предполагалось.
источник

YB

Yarique Belgorodsky in pro.cxx
Serhii Strarodumov
Здраствуйте, может вопрос скорее касательно новичков но меня это очень удивило. Сегодня увидил в С++ коде такое "if (n==12 or n==11)". Вопрос. Когда операторы || и && можно стало заменять на or или and?? и вообще по стандарту ли это? Никогда такого за 2 года разработки не видел. Компилятор GCC, С++17. Самое интересное что код копилируется и делает все как и предполагалось.
с С++17
источник

YB

Yarique Belgorodsky in pro.cxx
а на gcc лет 10 как
источник

FS

Flower Surgeon in pro.cxx
Serhii Strarodumov
Здраствуйте, может вопрос скорее касательно новичков но меня это очень удивило. Сегодня увидил в С++ коде такое "if (n==12 or n==11)". Вопрос. Когда операторы || и && можно стало заменять на or или and?? и вообще по стандарту ли это? Никогда такого за 2 года разработки не видел. Компилятор GCC, С++17. Самое интересное что код копилируется и делает все как и предполагалось.
источник