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

在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 @   刘浩de技术博客  阅读(348)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示