C/C++中的柔性数组(可伸缩性数组)

本文探讨了C++中柔性数组的概念和用途,通过STL空间配置器的联合体示例解释了柔性数组的实现。柔性数组允许在结构中包含大小可变的数组,且在内存分配时能动态调整。通过实例展示了如何利用柔性数组创建变长结构,并通过`new`运算符分配额外内存以访问可变长元素。
摘要由CSDN通过智能技术生成

在STL源码中的第2级空间配置器有一个联合定义如下:

union obj { union obj* free_list_link;   char client_data[1];  };

在侯大师的详细解释下,我总算对STL的空间配置器有一个总体印象。但对以上这个联合体的设计方式始终不得其所,client_data[1]这个数组,在空间分配中根本没有使用到嘛!它的设计初衷是什么呢?

       经过查询资料,得出以下粗浅的理解:首先作者使用联合体这个结构体的目的应该是充分利用内存,若使用结构体,占用的内存肯定更大。然后,为何有client_data[1]这个数组定义,看STL源码,在内存分配过程中,即在空间配置函数allocate()中调用的函数refill()里面,只应用到了free_list_link这个指针,这个指针的作用是链接内存块(1字节-16字节),当free_list链表中的内存块返回给用户(动态申请)时,free_list_link这个指针将被遗弃(即时在内存块的前4个字节(就是该内存块的free_list_link内容)存有下一个内存块的地址)。而client_data[1]这个数组到底有何作用,其实该数组是定义一个柔性数组。不是内存块的大小(1字节-16字节)吗&

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值