关于柔性数组

简介: 关于柔性数组

柔性数组的几个特点:

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.减少内存碎片

目录
打赏
0
0
0
0
0
分享
相关文章
柔性数组理解
柔性数组理解
56 0
【C/C++】动态内存&柔性数组
【C/C++】动态内存&柔性数组
160 0
结构体的内存对齐与位段
当我们描述一个人的年龄时我们可以使用,int age = 18;但是如果我们要描述一个人呢?很显然我们无法仅靠一个age就实现对一个人的描述,所以就有了结构体,在结构体中我们可以包含多种类型的数据,这样就可以实现对一个人的描述比如身高、爱好、体重等等
带你认识柔性数组
小编今天又给大家带来新东西了,相信柔性数组这个名词对于大部分人都比较陌生,那接下来就让我们去认识认识这个新朋友
94 0
【学习笔记之我要C】柔性数组
【学习笔记之我要C】柔性数组
91 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等