Я прочитал о __packed__
из здесь , и я понял, что когда __packed__
используется в struct
или union
, это означает, что переменные-члены размещаются таким образом чтобы минимизировать объем памяти, необходимый для хранения struct
или union
.
Теперь рассмотрим структуры в следующем коде. Они содержат одинаковые элементы (одинаковые type
, одинаковые имена переменных и расположены в одинаковом порядке). Разница в том, что один __packed__
, а другой нет.
#include <stdio.h>
int main(void)
{
typedef struct unpacked_struct {
char c;
int i;
float f;
double d;
}ups;
typedef struct __attribute__ ((__packed__)) packed_struct {
char c;
int i;
float f;
double d;
}ps;
printf("sizeof(my_unpacked_struct) : %d \n", sizeof(ups));
printf("sizeof(my_packed_struct) : %d \n", sizeof(ps));
ups ups1 = init_ups();
ps ps1;
return 0;
}
Есть ли способ скопировать распакованную структуру ups1
в упакованную структуру ps1
без выполнения member-variable-wise-copy
? Есть ли что-то вроде memcpy()
, которое применимо здесь?