关于柔性数组

简介: 关于柔性数组

柔性数组的几个特点:

1.必须在结构体中
2.在结构体的最后面
3.结构体除了柔性数组至少还要有一个其他成员
4.sizeof (编译器决定大小)返回结构体的大小不包含柔性数组
5.malloc 
6.free
struct sdshdr16 {
  uint16_t len;
  uint16_t alloc;
  unsigned char flags;
  char buf[];
};
//非柔性数组的方式
struct sdshdr16 {
  uint16_t len;
  uint16_t alloc;
  unsigned char flags;
  char *buf;
};

柔性数组只需要分配一次,

struct sdshdr16 *p = malloc(sizeof(sdshdr16) + 柔性数组大小)

free§; //free一次

柔性数组放在最后其实就是一个语法糖,告诉编译器,这块内存要动态分配

而普通指针需要malloc和free两次

malloc(sizeof(sdshdr16))

malloc(buf的大小)

既然柔性数组的大小是运行时确定的,那free怎么知道要释放多大呢?

其实在malloc分配后,会在前面有16字节存放长度,free时先向前偏移16字节,找到长度,在释放。

柔性数组优点:

1.方便内存分配释放

2.减少内存碎片

相关文章
|
SQL 数据库 OceanBase
OceanBase数据库的主备库参照的配置文件
【2月更文挑战第27天】OceanBase数据库的主备库参照的配置文件
264 4
|
存储 监控 安全
【Elasticsearch专栏 11】深入探索:Elasticsearch如何支持多租户架构
Elasticsearch支持多租户架构主要通过索引隔离、集群隔离和基于路由的隔离。通过为每个租户创建独立索引或配置路由规则,实现数据隔离。同时,利用基于角色的访问控制机制进行权限管理,确保租户数据安全。这些策略提供了灵活且安全的多租户支持。
423 5
|
JavaScript 前端开发 开发工具
基于 Vue3.0 和 Ant Design Vue ,高颜值管理后台UI框架vue-vben-admin运行
基于 Vue3.0 和 Ant Design Vue ,高颜值管理后台UI框架vue-vben-admin运行
632 1
打印全部异常堆栈、ExceptionUtils.getFullStackTrace这样最快
打印全部异常堆栈、ExceptionUtils.getFullStackTrace这样最快
525 0
|
并行计算 Java API
|
关系型数据库 MySQL 数据库
如何卸载MySQL?
【6月更文挑战第13天】如何卸载MySQL?
252 3
|
人工智能 自然语言处理 搜索推荐
博物馆地图导览系统:GIS与蓝牙定位技术实现地图导览与语音解说功能
维小帮博物馆地图导览系统结合GIS地图、蓝牙定位及智能语音解说,为访客提供沉浸式导览。系统采用自研地图引擎,精准构建三维模型,支持路径规划与个性化定制。蓝牙技术实现高精度室内定位及自动触发语音解说功能,无需手动操作。系统还支持多语言解说与AI语音生成,提升参观体验。目前已在多个博物馆应用并获好评。期待与您共同推进文化科技的融合发展!
370 3
|
存储 Oracle 关系型数据库
|
数据采集 存储 人工智能
蚂蚁集团联合上海仁济医院泌尿科发布国内首个临床专科推理数据集:RJUA-QA
详细介绍数据集的构建过程、特点及统计分析,并全面评测了行业和通用大模型在该数据集上的性能,后续团队将持续优化数据集,为人工智能在医疗领域的研究与应用提供有力支持。
蚂蚁集团联合上海仁济医院泌尿科发布国内首个临床专科推理数据集:RJUA-QA
|
机器学习/深度学习 传感器 编解码
路径规划算法:基于水基湍流优化的机器人路径规划算法- 附matlab代码
路径规划算法:基于水基湍流优化的机器人路径规划算法- 附matlab代码