Описание тега structure-packing

None Дзен и искусство уменьшения объема памяти структур данных, в первую очередь в коде C и C++
4 ответа

Дополнительные байты при объявлении члена структуры как uint32_t

У меня проблема при использовании типа uint32_t из библиотеки stdint.h. Если я запускаю следующий код (в Ubuntu linux 11.10 x86_64, g++ версия 4.6.1): #include "stdint.h" #include <iostream> using std::cout; typedef struct{ // api identifier u…
01 ноя '11 в 17:32
1 ответ

Имеет ли pragmapack() в C-программировании какое-либо применение помимо упаковки структур?

Пока я на собеседовании, интервьюер спросил меня, есть ли другое применение pragmapack() в C, кроме упаковки структур? Поэтому я ответил, что не знаю, кроме структуры упаковки. Так есть ли другое использование этого?
05 дек '18 в 08:24
5 ответов

Оператор sizeof возвращает неверный размер?

Возможный дубликат: Почему sizeof для структуры не равен сумме sizeof каждого члена? Дополнительные байты при объявлении члена структуры как uint32_t По какой-то причине sizeof Оператор возвращает фиктивный размер для этой структуры (48 вместо 40): …
01 дек '11 в 20:08
2 ответа

Странный вывод sizeof(struct) в C++

Может кто-нибудь объяснить, пожалуйста, вывод этого кода? #include <iostream> using namespace std; struct Yo{ char sex; int a; }; int main() { Yo c; cout<<sizeof(c.sex); cout<<endl<<sizeof(c.a); cout<<endl<<sizeof…
13 янв '14 в 16:45
10 ответов

Выравнивание памяти в C-структурах

Я работаю на 32-битной машине, поэтому я предполагаю, что выравнивание памяти должно быть 4 байта. Скажем, у меня есть структура: typedef struct { unsigned short v1; unsigned short v2; unsigned short v3; } myStruct; реальный размер составляет 6 байт…
25 мар '11 в 17:14
0 ответов

GCC Конечная структура

Я работаю над распределителем памяти. Каждый выделенный буфер начинается на 8-байтовой границе, и каждому предшествует заголовок для управления распределением (заголовок находится непосредственно перед 8-байтовым выровненным буфером). Заголовок выгл…
28 июл '18 в 19:11
2 ответа

Выравнивание 1 байта против выравнивания 4 байта (упаковка пикселей)

Я читаю OpenGL SuperBible для OpenGL 3.x. Мне трудно понять всю "концепцию упаковки пикселей". Я понимаю, что обычно для изображения шириной 199 пикселей требуется 597 байт [(199 * 3)3 для каждого цветового канала RGB]. Мой первый вопрос: почему это…
18 май '13 в 01:20
2 ответа

Неожиданный размер, когда структура имеет объединение

Я пытаюсь проверить размер структуры. По некоторым причинам он дает мне размер 18, а не ожидаемые 14 байтов (объединение должно иметь максимум 8 + 2 + 2 = 12 байтов). Кто-нибудь может мне помочь? typedef struct __attribute__((__packed__)) def { unio…
14 фев '18 в 07:38
9 ответов

Размер структуры с символом, двойным, int и a t

Когда я запускаю только фрагмент кода int *t; std::cout << sizeof(char) << std::endl; std::cout << sizeof(double) << std::endl; std::cout << sizeof(int) << std::endl; std::cout << sizeof(t) << std::end…
15 авг '10 в 09:33
4 ответа

Размер структуры в C

Возможный дубликат: Почему sizeof для структуры не равен сумме sizeof каждого члена? Рассмотрим следующий код C: #include <stdio.h> struct employee { int id; char name[30]; }; int main() { struct employee e1; printf("%d %d %d", sizeof(e1.id), …
03 дек '09 в 18:22
4 ответа

Как размер структуры зависит от типа данных

Я использую 32-битную ОС Linux и компилятор GCC. Я попытался с тремя различными типами структуры. в первой структуре я определил только один char переменная. размер этой структуры равен 1, что правильно. во второй структуре я определил только один i…
09 дек '13 в 10:51
2 ответа

Структура std::memcpy с плотно упакованными членами типа TriviallyCopyable T в массив T и наоборот

Здесь было установлено, что нельзя считать плотно упакованные последовательные члены структуры типа T массивом T. Но как насчет копирования базового представления? Дано: struct vec { float x, y, z; }; с теми же ограничениями: static_assert(sizeof(v…
0 ответов

Можно ли сделать структуры процессов vC++ как __attribute__((gcc_struct, pack))?

Можно ли заставить vC++ производить выравнивание и заполнение структур так же, как __attribute__((gcc_struct, packed)) компилятор gcc будет выдавать?
29 авг '18 в 15:26
9 ответов

Размер структуры C++: 2+4+2+2+4 = 16

Возможный дубликат: Почему sizeof для структуры не равен сумме sizeof каждого члена? Почему sizeof(); этой структуры 16 байтов? Я собираю в g++. struct bitmapfileheader { unsigned short bfType; unsigned int bfSize; unsigned short bfReserved1; unsign…
09 дек '09 в 20:25
6 ответов

Размер структуры, содержащей битовые поля

Возможный дубликат: Почему sizeof для структуры не равен сумме sizeof каждого члена? Я пытался понять концепцию битовых полей. Но я не могу найти, почему размер следующей структуры в CASE III составляет 8 байтов. СЛУЧАЙ I: struct B { unsigned char c…
06 окт '12 в 17:18
5 ответов

Переосмысление структуры с элементами того же типа, что и массив, стандартным образом

В различных математических кодах 3d я иногда сталкиваюсь с чем-то вроде этого: struct vec { float x, y, z; float& operator[](std::size_t i) { assert(i < 3); return (&x)[i]; } }; Что, AFAIK, является недопустимым, потому что реализациям ра…
3 ответа

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

Я делаю код для 16-битного микропроцессора. Моя память довольно ограничена в 128 КБ. Компилятор IAR C/C++ для MSP430 Мне нужно реализовать некоторый код для экономии памяти. Я попытался реализовать это с помощью этой характерной реализации C. struct…
04 июл '19 в 15:57
1 ответ

Портативный способ создания неоднородного массива данных вершин

В графическом программировании очень распространено работать с форматами вершин. Это описано, например, здесь. Однако я ищу способ выполнить то, что не вызывает неопределенного поведения (в основном я ищу информацию о C++, но C тоже подойдет). Обычн…
0 ответов

Каковы размеры упаковки структуры по умолчанию для .NET на разных платформах?

Документация дляSystem.Runtime.InteropServices.StructLayoutAttribute.Pack поле говорит, что: По умолчанию значение равно 0, что указывает на размер упаковки по умолчанию для текущей платформы. Мне не удалось найти какую-либо документацию, в которой …
08 май '20 в 10:16
1 ответ

Какие значения являются допустимыми значениями n в директиве #pragma pack(n)?

Я сделал гугл и обнаружил, что n = 1,2,4,8 - единственные допустимые аргументы для директивы препроцессора. #pragma pack(n). Может кто-нибудь сказать мне, пожалуйста, что не так со значениями, отличными от вышеупомянутых значений? (например, n =3,5 …
08 май '21 в 05:09