记录一个字符数组和字符指针的不同
在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个字节的空间。不太懂其中的原理。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架