当前位置: 首页 > news >正文

河南省建设监理协会网站证书查询有限公司英文缩写

河南省建设监理协会网站证书查询,有限公司英文缩写,网络营销方案毕业设计,seo推广服务来源#xff1a;公众号【编程珠玑】作者#xff1a;守望先生ID#xff1a;shouwangxiansheng这个问题源于读者在阅读redis源码时的一个疑问。先看下面的代码#xff0c;对于包含动态字符串成员的两个结构体Test0和Test1占用空间分别是多少呢#xff1f;//来源#xff1a;… 来源公众号【编程珠玑】作者守望先生IDshouwangxiansheng这个问题源于读者在阅读redis源码时的一个疑问。先看下面的代码对于包含动态字符串成员的两个结构体Test0和Test1占用空间分别是多少呢//来源公众号【编程珠玑】 //作者守望先生 #includestdio.h struct Test0 {int a;int b;char *c; }; struct Test1 {int a;int b;char c[]; }; int main(void) {printf(sizeof(struct Test0)  %zd\n,sizeof(struct Test0));printf(sizeof(struct Test1)  %zd\n,sizeof(struct Test1));return 0; } 很多读者一眼就能看出来在64位系统上编译为64位程序其输出结果为16 8 对于Test0的结果是16通常没有什么疑问毕竟4int4int8指针 16但是对于后者的结构体占用空间为8字节有的读者可能会有疑问。关于字节对齐参考《字节对齐看这篇就懂了》柔性数组flexible array实际上这是在C99中引入的柔性数组的特性。即结构体的最后一个成员可以不完整类型(一种缺乏足够的信息去描述一个完整对象的类型)的数组但它使得整个结构体的大小就像没有这个成员一样。但是呢当用结构体通过这个名字访问这个成员时就像访问一个普通数组成员一样。如果数组最终一个元素都没有的话那么访问这个数组将会是未定义行为了。正如我们前面所看到的struct Test1 {int a;int b;char c[]; }; 成员c是一个数组但是并没有指定大小使用sizeof计算Test1其占用空间也仅仅是8字节。有什么好处那么使用柔性数组有什么好处呢内存申请和释放假设分别使用两种类型的结构体存储16字节的字符数据需要申请内存。对于struct Test0strcut Test0 *t0  malloc(sizeof(struct Test0));//为结构体申请内存 t0-c  malloc(sizeof(char) * 16);//为成员指向的数据申请内存 而对于struct Test1strcut Test1 *t1  malloc(sizeof(struct Test1)  sizeof(char) * 16); 看出区别了吗前者需要两次内存申请而后者只需要一次。前者地址不连续两次malloc后者地址连续。而你访问成员c的时候只需要下面这样就可以t1-c和普通成员无异。要判断它们的地址是否连续也非常简单只需要分别打印b和c的地址就可以了。和内存释放类似前面需要单独释放成员c申请的内存而后者可以一起释放。数据拷贝正由于前面的差别导致数据拷贝时更有区别。对于struct Test0//memcpy(t0copy,t0,sizeof(struct Test0));//不可这样直接t0copy的c和t0的c指向同一片内存区域。t0copy.a  t0.a; t0copy.b  t0.b; memcpy(t0copy.c,t0.c,sizeof(char)*16); 这里无法一次拷贝因为它的成员c是一个指针类型我们需要的是一份完整拷贝因此必须拷贝它指向的内存。参考《结构体成员赋值到底是深拷贝还是浅拷贝》但是对于struct Test1memcpy(t0copy,t0,sizeof(strcut Test1)  sizeof(char) * 16); 在这里由于柔性数组的内存它的数据内容和结构体数据成员的地址是连续的因此可以直接拷贝。减少内存碎片由于结构体的柔性数组和结构体成员的地址是连续的即可一同申请内存因此更大程度地避免了内存碎片。另外由于该成员本身不占结构体空间因此整体而言比普通的数组成员占用空间要会稍微小点。零长数组与柔性数组功能类似还有一个0长数组不过它并不是标准中的但是它可以实现类似的功能使用方式如下struct Test1 {int a;int b;char c[0]; }; 差别在于使得数组长度为0。但是由于它并非C标准中的因此从可移植性考虑不建议使用这种方式除非你还无法使用C99。总结柔性数组的使用位于结构体最后一个位置不完整数组类型不是唯一成员最后放张图看差别普通和柔性数组 推荐阅读专辑|Linux文章汇总专辑|程序人生专辑|C语言嵌入式Linux微信扫描二维码关注我的公众号
http://www.pierceye.com/news/893762/

相关文章:

  • 企业网站优化兴田德润怎么样wordpress标签不输出文章
  • 百度站长平台论坛永嘉网站制作
  • 月嫂公司网站建设构思免费的短视频素材库
  • 2017做哪些网站致富邢台市行政区划图
  • 深圳和海枫建设集团有限公司网站国内外基于vue框架的网站建设现状
  • 珠海免费网站制作购物网站前台模板
  • 小程序软件制作网站捷克注册公司网站
  • 做网站细节电商网站建设 平台
  • 网站建设方案书1500全国中小企业网站
  • 阳江市建设局网站合肥最新消息今天
  • 做关于什么样的网站好货代去什么网站开发客户
  • 中国工程建设造价管理协会网站漳州seo顾问
  • 什么网站可以做2.5D场景网站过程建设
  • google移动网站建站十大原则室内装修工人培训班
  • 自己做网站要会什么软件下载搭建网站有什么用
  • 天津做网站找谁网站如何做首面关键词
  • 微信小程序做链接网站做catalog的免费网站
  • 呼市网站制作招聘建设网站 托管 费用
  • dede自适应网站模板济南著名网站建设
  • 旅游网站排名榜手机开发网站工具
  • 饰品公司网站建设策划书百度seo优化收费标准
  • wordpress企业建站5网站建设
  • 网站运营解决方案皮具网站设计
  • 地宝网 网站建设上海网站制作网站开发
  • 有哪些出名的工业设计网站做废钢铁生意在哪个网站了解
  • wordpress 根目录函数深圳债务优化公司
  • 基于android的app的设计与开发seo链接优化
  • 怎么用优盘做网站登录密钥百度收录网站名字
  • 网站制作的一般步骤网站域名备案需要多长时间
  • 运城市住房与城乡建设局网站郑州百姓网招聘