구조 내부에서 가변 길이 배열을 사용하는 가장 좋은 방법은 무엇입니까? 는 GCC 4.8과 x86_64의 기계에 길이가 0 인 배열로 구조 패딩
typedef struct foo_s {
uint32_t data_type;
uint16_t data_len;
uint8_t data[];
} foo_t;
말해, 난 거기에 차이 DATA_LEN 후 패딩이 있지만, 패딩이 구조가 같은
sizeof(foo_t) == 8, but
offsetof(foo_t, data) == 6
보이는 얻었다. 이 문제를 피하기 위해 항상 가장 큰 회원을 유지해야합니까? 즉
typedef struct foo_s {
uint16_t data_len;
uint32_t data_type;
uint8_t data[];
} foo_t;
var len 배열을 사용하는 가장 좋은 방법은 무엇입니까?
구조체가 배열의 요소 일 때 uint32_t를 계속 정렬해야하기 때문에 sizeof가 8을 반환합니다. 물론 ** 배열에 저장하지 않을 것이므로 무시하십시오. malloc을 호출하면 offsetof() + 배열 크기 만 사용됩니다. –