Присутствует сруктура из си заголовка, такого вида:
typedef struct AVCodecDescriptor {
int id;
int type;
/**
* Name of the codec described by this descriptor. It is non-empty and
* unique for each codec descriptor. It should contain alphanumeric
* characters and '_' only.
*/
const char *name;
/**
* A more descriptive name for this codec. May be NULL.
*/
const char *long_name;
/**
* Codec properties, a combination of AV_CODEC_PROP_* flags.
*/
int props;
/**
* MIME type(s) associated with the codec.
* May be NULL; if not, a NULL-terminated array of MIME types.
* The first item is always non-NULL and is the preferred MIME type.
*/
const char *const *mime_types;
/**
* If non-NULL, an array of profiles recognized for this codec.
* Terminated with FF_PROFILE_UNKNOWN.
*/
const struct AVProfile *profiles;
} AVCodecDescriptor;
При подсчете на пальцах, на x86 системе, размер структуры равен 28 байт, следовательно, на x64 размер должен перемножаться на 2, но в итоге при вызове sizeof
получаем не 56 байт, а 48.
Почему так происходит и как такое может отразиться при использовании таких размеров для структуры .net?
P.S. Разные компиляторы отдали одно и тоже значение:
gcc x64 : Size of AVCodecDescriptor is: 48 bytes
mingw32 : Size of AVCodecDescriptor is: 28 bytes
cygwin x64 : Size of AVCodecDescriptor is: 48 bytes
Как правильно подойти к решению данной задачи, дабы не лезть за пределы памяти структуры, и так что бы размер структуры не был слишком велик?
int
что на 32, что на 64 разрядах будет 4 байта. Поменяется только размер указателя + возможное выравнивание на 8 байт.
Если очень нужно ужаться (так ли уж важны вам эти байты?), то используйте выравнивание на 4 байта - будет 44 байта.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Вопрос в заголовкеКак можно скомпилировать бинарник для использования на Linux/Android/etc, используя Windows? Для сборки использую make, но, вроде, gcc не умеет...
Имею DirectX11 и небольшой движокЧто хочу сделать - отправить в вершинный шейдер структурный буфер собственного типа(в типе единственный член,...
Нужно записать в бинарный файл число типа int, хранящееся в переменной mass_size
Есть массивы a и b типа string, где a[1]="hello"; a[2]="woRlD"; a[3]="qejqjekqew"; Массив b изначально пустой