记录一个字符数组和字符指针的不同

在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个字节的空间。不太懂其中的原理。

posted @ 2012-06-19 18:08  刘浩de技术博客  阅读(343)  评论(2编辑  收藏  举报