Описание тега struct-member-alignment

1 ответ

Какова альтернатива MSVC /Zp на GCC и Clang?

В случае, я хочу определить выравнивание структуры на уровне модуля, используя флаги компилятора, такие как /Zp для cl на окнах. Какие есть альтернативы на GCC и Clang?
23 июн '15 в 15:40
1 ответ

sizeof c struct только с полями char

Я понимаю, как работает padding. Я знаю, что такое выравнивание. Что для меня странно, так это то, что размер структуры только с полями char не выровнен по 4 байта (заполнение в конце)? Я подозреваю, что это просто не гарантируется спецификацией, по…
0 ответов

Быстрая проблема выравнивания с UnsafeBytes и UnsafePointer

В следующем коде testP.deviceID а также testP.deviceID1 должно иметь одинаковое значение. Однако testP.deviceID1 содержит 2 (он должен содержать 513). Так что есть что-то фундаментальное, что я не понимаю в отношении выравнивания? let byteArray:[UIn…
4 ответа

Программа на C - Упаковка и выравнивание данных переменной структуры

Каким будет вывод программы на 32-битном компьютере (с использованием GCC)? Объясните. #include<stdio.h> int main() { struct node { int data; struct node *link; }; struct node *p, *q; p = (struct node *) malloc(sizeof(struct node)); q = (struc…
0 ответов

Какова структура упаковки по умолчанию с использованием cl/gcc/clang?

В msdn для опции компилятора cl /Zp упоминается, что "упаковывает структуры на 8-байтовых границах (по умолчанию)". Означает ли это, что если существует тип данных размером> 8 байт, по умолчанию (без параметра компилятора или пакета прагмы) он не бу…
24 июн '15 в 08:10
2 ответа

Структурное выравнивание безопасного использования

Я новичок в компании, где используется следующее использование структуры: #include <stdio.h> #include <string.h> typedef unsigned char uint8; typedef signed char int8; typedef unsigned short int uint16; typedef signed short int int16; ty…
10 авг '16 в 17:28
4 ответа

Почему Visual Studio не оптимизирует структуры для лучшего использования памяти?

Мой вопрос: почему компилятор Visual Studio 2012 не автоматически переупорядочивает элементы структуры для лучшего использования памяти? Компилятор, похоже, хранит элементы в том порядке, в котором они объявлены в определении структуры, с некоторыми…
3 ответа

Выравнивание класса по классу, от которого он наследуется? Принудительно выравнивать все стеки? Изменить размер?

Я хочу иметь базовый класс, который диктует выравнивание объектов, которые наследуются от него. Это прекрасно работает для кучи, потому что я могу контролировать, как это распределяется, и как массивы распределяются в шаблоне пользовательского масси…
3 ответа

Выравнивание членов структуры - разный размер с использованием 16-битного и 32-битного компилятора

У меня есть структура, используемая для передачи сообщений на панель управления, которая мне необходима для обеспечения программной совместимости между 16-разрядным компилятором Keil C167 и 32-разрядным компилятором Tricore gcc. typedef struct { uns…
0 ответов

Есть ли гарантированный способ избежать заполнения между базовым и производным классом?

Я работаю над сетевой программой, которая будет работать с пакетами, имеющими часть заголовка и часть полезной нагрузки. Заголовок переменной длины с добавленными или удаленными сегментами расширения в зависимости от условий сети. Часть пользователь…
2 ответа

Почему этот атрибут выравнивания должен быть указан в typedef?

Первоначально я написал этот вопрос со своего планшета и предпринял много быстрых действий, чтобы, по моему мнению, в конечном итоге привести к путанице среди людей, которые читали и / или пытались ответить на вопрос. Я не прошу решения проблемы, с …
2 ответа

В чем причина выравнивания этой структуры?

В шапке Вулкана vulkan.h есть структура, определенная как typedef struct VkSwapchainCreateInfoKHR { VkStructureType sType; const void* pNext; VkSwapchainCreateFlagsKHR flags; VkSurfaceKHR surface; uint32_t minImageCount; VkFormat imageFormat; VkColo…
2 ответа

Заполнение структуры объединением членов std::bitset

После того, как я решил свою проблему с этим вопросом, я продолжил расширять эту версию своего кода, чтобы включить объединения полей данных из моих предыдущих версий шаблона с этой версией, и у меня есть это до сих пор: main.cpp #include <iostre…
2 ответа

Добавлены дополнительные биты в структуре битовых полей в C

Я пытаюсь создать клиентский код C для протокола CAPWAP. Я попытался реализовать заголовок CAPWAP, используя структуру битового поля. Но после отправки этой структуры через сокет с помощью sendto(), когда я перехватываю пакет с помощью wireshark, я …
0 ответов

Массив выровненной структуры, которая индуцирует регулярный массив отдельных членов

Если у меня есть структура (например, employee ниже), массив такой структуры индуцирует пошаговые массивы всех элементов структуры, только если размер структуры является (наименьшим) общим кратным (LCM) размера всех элементов. В противном случае в м…
7 ответов

Как организовать членов в структуре, чтобы тратить на выравнивание меньше всего места?

[Не дубликат заполнения структуры и упаковки. Этот вопрос о том, как и когда происходит заполнение. Этот рассказ о том, как с этим бороться.] Я только что понял, сколько памяти теряется в результате выравнивания в C++. Рассмотрим следующий простой п…
1 ответ

Как установить параметры сборки Visual C для выравнивания элементов структуры в CMake?

Я хочу знать, как установить следующие параметры сборки Visual Studio в моем файле CMakeLists.txt. Выравнивание элемента структуры = 1 байт (/Zp1), который задается в свойствах проекта (Свойства конфигурации -> C/C++ -> Генерация кода).
1 ответ

vcpkg: Укажите выравнивание члена структуры

У меня есть старый код, который скомпилирован с упаковкой в ​​1 байт (аргумент /Zp1) Struct Member Alignment, и я добавляю к ним модульное тестирование с помощью gTest. я используюvcpkgдля установки gTest, но он скомпилирован с использованием по умо…
1 ответ

Сравнение двух структур одного типа из внешнего API

Так что в основном я пытаюсь сравнить два VkPhysicalDeviceFeatures из Вулкана, один из VkPhysicalDeviceЯ смотрю, и другой, который соответствует набору действительно необходимых мне функций. аVkPhysicalDeviceFeaturesструктура содержит только VkBool3…
25 апр '20 в 00:49
1 ответ

Выравнивание простого класса, чтобы разрешить доступ к массиву без UB

Предположим, у меня есть следующий простой класс: struct employee{ std::string name; short salary; std::size_t age; employee(std::string name, short salary, std::size_t age) : name{name}, salary{salary}, age{age}{} }; Поскольку мне нужен массивный д…