关于柔性数组

简介: 关于柔性数组

柔性数组的几个特点:

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

相关文章
|
6月前
|
编译器 C语言
柔性数组理解
柔性数组理解
43 0
|
编译器 C语言 Python
柔性数组
柔性数组
43 0
|
程序员 C语言 C++
动态内存管理与柔性数组2
动态内存管理与柔性数组
48 0
|
6月前
|
编译器 C语言
C语言中柔性数组的讲解与柔性数组的优势
C语言中柔性数组的讲解与柔性数组的优势
|
编译器 C语言 C++
动态内存分配(3)——柔性数组
动态内存分配(3)——柔性数组
|
存储 算法 程序员
【C/C++】动态内存&柔性数组
【C/C++】动态内存&柔性数组
123 0
|
编译器 C语言
认识柔性数组
认识柔性数组
|
6月前
|
编译器 C语言
|
编译器 C语言
带你认识柔性数组
小编今天又给大家带来新东西了,相信柔性数组这个名词对于大部分人都比较陌生,那接下来就让我们去认识认识这个新朋友
76 0
|
编译器 C语言
【学习笔记之我要C】柔性数组
【学习笔记之我要C】柔性数组
67 0