Алгоритм выравнивания и заполнения данных структуры / класса? - PullRequest
2 голосов
/ 22 июня 2011

Кажется, я не могу найти никакой информации о том, как вычислять отступы в структуре или классе в C, C ++.

В HLSL есть структуры данных, называемые «постоянными переменными», и они очень похожи на структуры C с включенной #pragma pack (4). Вот ссылка для получения дополнительной информации о постоянных переменных в HLSL.

У меня проблема с попыткой создать дескриптор формата структуры. После анализа кода HLSL дескриптор константы будет содержать информацию о типах данных, содержащихся в структуре постоянной переменной. Он будет описывать тип данных каждой переменной-члена, ее смещение и общий размер структуры. Проблема, с которой я столкнулся, заключается в определении окончательного размера структуры из-за заполнения.

Если есть алгоритм для этого, то я должен быть в состоянии закодировать его и вычислить фактический размер дополнения любой «постоянной переменной» в HLSL. Проблема в том, что я не знаю, что это такое, и при этом я не знаю, где это найти?

1 Ответ

1 голос
/ 04 июля 2011

У меня вопрос по поводу алгоритма, используемого для работы #pragma pack 4.(Например, он просматривает одну переменную за раз в структуре и использует своего рода тест на максимальный размер, чтобы определить, где заполнять, или анализирует всю структуру и каким-то образом перемешивает данные.)

Компилятор не может перемешивать данные в структуре в стиле C.C гарантирует, что члены распределены именно в том порядке, в котором они объявлены.Любые отступы должны находиться между членами или в конце структуры.

Класс C ++ со спецификаторами доступа не обязательно должен быть совместим с C, поэтому допускается некоторое переупорядочение.

...