Описание тега 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…
04 фев '17 в 08:58
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, является недопустимым, потому что реализациям ра…
01 янв '17 в 21:24
3
ответа
Битовые поля сделаны более оптимизированными
Я делаю код для 16-битного микропроцессора. Моя память довольно ограничена в 128 КБ. Компилятор IAR C/C++ для MSP430 Мне нужно реализовать некоторый код для экономии памяти. Я попытался реализовать это с помощью этой характерной реализации C. struct…
04 июл '19 в 15:57
1
ответ
Портативный способ создания неоднородного массива данных вершин
В графическом программировании очень распространено работать с форматами вершин. Это описано, например, здесь. Однако я ищу способ выполнить то, что не вызывает неопределенного поведения (в основном я ищу информацию о C++, но C тоже подойдет). Обычн…
22 янв '20 в 11:43
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