记录一个字符数组和字符指针的不同
在redis中,字符串类型sds struct是如下定义的:
41 struct sdshdr { 42 int len; 43 int free; 44 char buf[]; 45 };
在其中,使用了char buf[]而不是char *buf。写了个测试程序,程序以及在64位机器上跑出来的结果如下:
1 #include<stdio.h> 2 3 struct sdshdr1 { 4 int len; 5 int free; 6 char buf[]; 7 }; 8 struct sdshdr2 { 9 int len; 10 int free; 11 char *buf; 12 }; 13 14 int main() { 15 printf("first[]: %lu, second*: %lu\n",sizeof(struct sdshdr1),sizeof(struct sdshdr2));
16 }
liuhao@liuhao-Lenovo:~$ ./a.out
first[]: 8, second*: 16
可见,使用buf[],每一个struct将节省8个字节的空间。不太懂其中的原理。