关于柔性数组.简要的谈谈柔性数组

简介: 关于柔性数组.简要的谈谈柔性数组

什么是柔性数组

柔性数组特点:
~结构中的柔性数组成员前必须至少有一个其他成员。
~sizeof()返回的这种结构大小不包括柔性数组的内存
柔性数组~包含柔性数组的结构用malloc()函数进行内存的动态分配,并且分配的内存应该大于结构体的大小,以适应柔性数组的预期大小,他们在内存上是连续的。

指针能做到为什么非要用柔性数组呢

用指针也可以做到这种效果,那么为什么会有柔性数组这种方案呢
比如:

struct S1
{
    int num;
int arr[];
};

柔性数组,空间上是连续的

{
int num;
int *arr;
};

指针来实现,num和arr所指向的空间可能是不连续的
实现上的细节是有差异的,但是也能达到想要的效果

柔性数组的优势

第一个好处:方便内存释放
柔性数组的方案释放一次,指针方案释放两次
第二个好处:这样有利于访问速度
由于是连续存放的,连续的内存有益于提高访问速度,也有益于减少内存碎片。
cpu先去寄存器拿,拿不到再去缓存里去拿,再拿不到再去内存里去拿
当访问当前数据时,就会把周围的数据加载到寄存器当中去,在内存中存储是连续的话,命中率会高一些
相关文章
|
6月前
|
编译器 C语言
C语言探索旅程之【柔性数组】
C语言探索旅程之【柔性数组】
38 0
|
7月前
|
编译器 C语言
C语言中柔性数组的讲解与柔性数组的优势
C语言中柔性数组的讲解与柔性数组的优势
|
7月前
|
存储 程序员 编译器
动态内存管理+柔性数组+经典笔试题
动态内存管理+柔性数组+经典笔试题
69 0
C进阶-动态内存管理+柔性数组(1)
C进阶-动态内存管理+柔性数组
44 0
|
编译器 C语言 C++
C进阶-动态内存管理+柔性数组(2)
C进阶-动态内存管理+柔性数组
49 0
|
存储 编译器 数据处理
c语言、c++扩展介绍 ————柔性数组、零长数组。
零长数组做为一种 GNU 的语法扩展方式,为数据处理提供优化支持。 因为编译器的编译特性,这种声明方式,只是一个指向固定位置的偏移量常量, 为什么要使用零长数组
88 0
|
编译器 C语言
【C语言进阶(九)】常见内存错误以及柔性数组
【C语言进阶(九)】常见内存错误以及柔性数组
|
编译器 C语言
【C语言】一篇带你了解 柔性数组的意义与如何使用
【C语言】一篇带你了解 柔性数组的意义与如何使用
122 0
|
存储 编译器 C语言
【C语言进阶篇】看完这篇结构体文章,我向数据结构又进了一大步!(结构体进阶详解)(上)
【C语言进阶篇】看完这篇结构体文章,我向数据结构又进了一大步!(结构体进阶详解)
119 0
|
C语言
【C语言进阶篇】看完这篇结构体文章,我向数据结构又进了一大步!(结构体进阶详解)(下)
【C语言进阶篇】看完这篇结构体文章,我向数据结构又进了一大步!(结构体进阶详解)(下)
292 0