结构体中最后一个长度为 0 或 1 的数组
简单 code 示例
#include <stdio.h>
struct str_t1 {
int a;
int b;
char *c;
} __attribute ((packed));
struct str_t2 {
int a;
int b;
char c[0]; /* c 并不占用实际的空间 */
} __attribute ((packed));
int main()
{
printf("size of struct str_t1 : %d\n", sizeof(struct str_t1));
printf("size of struct str_t2 : %d\n", sizeof(struct str_t2));
struct str_t2 *str2 = malloc(sizeof(struct str_t2) + sizeof(char) * 3);
str2->c[0] = 'a';
str2->c[1] = 'b';
str2->c[2] = 'c';
printf("%c%c%c\n", str2->c[0], str2->c[1], str2->c[2]);
}
打印出 struct str_t1 大小为 12, struct str_t2 的大小为 8
可以知道, 实际上 char c[0] 并不占用空间.
这是我在看一个内存 buddy system 分配算法时, 碰到的一种使用方法.用来减少内存的使用.
贴上参考博客, 做个书签。
结构体最后的长度为0或者1的数组[转]
在 buddy system 算法中的使用
cloudwu/buddy