关于柔性数组

简介: 关于柔性数组

柔性数组的几个特点:

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

相关文章
|
4月前
|
编译器 C语言
柔性数组理解
柔性数组理解
36 0
|
10月前
|
编译器 C语言 Python
柔性数组
柔性数组
33 0
|
编译器 C语言 C++
动态内存分配(3)——柔性数组
动态内存分配(3)——柔性数组
|
4月前
|
编译器 C语言
|
10月前
|
编译器 C语言
认识柔性数组
认识柔性数组
|
存储 算法 程序员
【C/C++】动态内存&柔性数组
【C/C++】动态内存&柔性数组
89 0
|
存储 安全 程序员
动态内存管理与柔性数组
动态内存管理与柔性数组
|
编译器 C语言
常见的动态内存的错误 和 柔性数组
✅<1>主页:C语言的前男友 📃<2>知识讲解:常见的动态内存的错误,以及柔性数组(C99) 🔥<3>创作者:C语言的前男友 ☂️<4>开发环境:Visual Studio 2022 💬<5>前言:之前我们说过动态内存管理的知识,今天我们来见识一下,动态内存管理常见的错误。帮助大家对动态内存管理有更深入的理解。
|
编译器 C语言
带你认识柔性数组
小编今天又给大家带来新东西了,相信柔性数组这个名词对于大部分人都比较陌生,那接下来就让我们去认识认识这个新朋友
64 0