Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 26.09.2022
Сообщений: 3

Выравнивание структур

26.09.2022, 15:44. Показов 1429. Ответов 9

Студворк — интернет-сервис помощи студентам
Сегодня во время рабочего процесса столкнулся с забавным явлением.

В рамках актуализации Легаси кода в ТЗ было указана замена в структурах char(C) на unsigned char(UC).

Выполнив все указания, было обнаружено, что размер структуры с UC превышает размер структуры с С на 48 байт с учётом того, что любые другие поля изменениям не подвергались.

Изначально предположил, что проблема в выравнивании, но #pragma push до нужного размера все равно не могла сжать структуру.

Соответственно, вопрос, откуда могут взяться 48 лишних байт призамене C на UC, если оба типа данных однобайтовые?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.09.2022, 15:44
Ответы с готовыми решениями:

Выравнивание структур
Есть одна функция, эта функция использует структуру, функция используется в двух разных проектах VS2019, причем я смотрел...

Выравнивание структур
Сам в этом почти не разбираюсь, искал в инете, находил только разные вопросы в форумах, ну а нужна естественно просто какая ни будь статья...

Выравнивание структур
Подскажите пожалуйста, как в Си++ задать структуру/класс/тип данных, чтобы она/её поля были выровнены на одределённую границу в памяти,...

9
Злостный нарушитель
 Аватар для Verevkin
10358 / 5773 / 1274
Регистрация: 12.03.2015
Сообщений: 26,686
26.09.2022, 16:01
Цитата Сообщение от Demid228 Посмотреть сообщение
Соответственно, вопрос, откуда могут взяться 48 лишних байт призамене C на UC, если оба типа данных однобайтовые?
Ну структуру-то покаж! Телепатов тут нет.
0
0 / 0 / 0
Регистрация: 26.09.2022
Сообщений: 3
26.09.2022, 16:18  [ТС]
Verevkin, не имею права, секретная информация. Да и вопрос собственно направлен не столько на рассмотрение конкретной структуры, сколько о неявных отличиях UC о C в контексте применения. Тем более вопрос уже решен применением int8.
0
Злостный нарушитель
 Аватар для Verevkin
10358 / 5773 / 1274
Регистрация: 12.03.2015
Сообщений: 26,686
26.09.2022, 16:22
Цитата Сообщение от Demid228 Посмотреть сообщение
не имею права, секретная информация.
Ахахахаха! Да неужели?!
Цитата Сообщение от Demid228 Посмотреть сообщение
Тем более вопрос уже решен применением int8.
Ну и хрен с тобой.
Кстати, в таких случаях в первую очередь надо проверить sizeof() применяемых типов для данного компилятора.
0
0 / 0 / 0
Регистрация: 26.09.2022
Сообщений: 3
26.09.2022, 16:33  [ТС]
Verevkin, оба типа однобайтовые. Это проверено. А по поводу секретности - так оно и есть, в подробности вдаваться не хочу.

Вопрос о неявных различиях типов ещё открыт.
0
Злостный нарушитель
 Аватар для Verevkin
10358 / 5773 / 1274
Регистрация: 12.03.2015
Сообщений: 26,686
26.09.2022, 16:35
Цитата Сообщение от Demid228 Посмотреть сообщение
оба типа однобайтовые. Это проверено.
Ну чудес-то не бывает. Гонишь ты чото, нутром чую.
0
фрилансер
 Аватар для Алексей1153
6462 / 5670 / 1131
Регистрация: 11.10.2019
Сообщений: 15,098
26.09.2022, 20:59
Demid228, если всё такое секретное, то минимальный компилируемый пример структуры с демонстрацией проблемы - в студию!

Добавлено через 3 минуты
Demid228, на всякий случай: unsigned char,char, signed char - это три разных типа

Цитата Сообщение от Demid228 Посмотреть сообщение
замена в структурах char(C) на unsigned char(UC).
попробуй заменить на uint8_t
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
26.09.2022, 22:31
Цитата Сообщение от Алексей1153 Посмотреть сообщение
на всякий случай: unsigned char,char, signed char - это три разных типа
Кроме того, char может быть как знаковый так и беззнаковый, в зависимости от реализации.
Явно кроме замены C на UC, еще чего то дернули.
К тому же, "секретная структура" может зависеть от максимального значения используемого типа.
Ну и еще 100500+ вариантов.

Цитата Сообщение от Demid228 Посмотреть сообщение
Вопрос о неявных различиях типов ещё открыт.
А почему они неявные ? Как раз таки все с типами в С++ явно.
0
106 / 93 / 44
Регистрация: 26.07.2015
Сообщений: 197
27.09.2022, 14:58
Какой компилятор? GCC? Clang? MSVC? DPC++? IAR?
Цитата Сообщение от Demid228 Посмотреть сообщение
#pragma push до нужного размера все равно не могла сжать структуру.
Имеется в виду #pragma pack(push, 1)? Какой синтаксис хочет видеть компилятор, может ему надо через __pragma. Это, кончено, маловероятно, но по логике структура не должна была увеличится из за замены C на UC.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
29.09.2022, 16:34
Цитата Сообщение от Demid228 Посмотреть сообщение
сколько о неявных отличиях UC о C в контексте применения.
В данном контексте никаких различий нет. Ваша проблема из-за чего-то другого.

An unsigned integer type has the same object representation, value representation, and alignment requirements ([basic.align]) as the corresponding signed integer type.
https://eel.is/c++draft/basic.... damental-3
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.09.2022, 16:34
Помогаю со студенческими работами здесь

Выравнивание структур
typedef struct _WinBMPFileHeader { WORD FileType; DWORD FileSize; WORD ...

Компилятор \ Настройка \ Выравнивание структур
Здравствуйте! Темы животрепещущей не нашел... Собственно, вопрос: Как в компиляторе qt (или дать ему указание) отключить...

Выравнивание структур. Битовые поля
Есть такой код: #pragma pack(push, 1) struct SC { unsigned char a : 1; unsigned char b : 1; unsigned char ...

Структуры.Обработка массивов структур.Создать массив структур из 10-ти элементов
Создать массив структур из 10-ти элементов: <Номер договора><Фамилия клиента><стоимость товара><выплаченная сумма> ...

Блочная сортировка структур (Отсортировать массив структур по фамилии)
Подскажите алгоритм блочной сортировки структур на языке С++. Мне нужно отсортировать массив структур по фамилии.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru