Присутствует сруктура из си заголовка, такого вида:
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 байта.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости