什么是柔性数组
柔性数组特点:
~结构中的柔性数组成员前必须至少有一个其他成员。
~sizeof()返回的这种结构大小不包括柔性数组的内存
柔性数组~包含柔性数组的结构用malloc()函数进行内存的动态分配,并且分配的内存应该大于结构体的大小,以适应柔性数组的预期大小,他们在内存上是连续的。
指针能做到为什么非要用柔性数组呢
用指针也可以做到这种效果,那么为什么会有柔性数组这种方案呢
比如:
struct S1
{
int num;
int arr[];
};
柔性数组,空间上是连续的
{
int num;
int *arr;
};
指针来实现,num和arr所指向的空间可能是不连续的
实现上的细节是有差异的,但是也能达到想要的效果
柔性数组的优势
第一个好处:方便内存释放
柔性数组的方案释放一次,指针方案释放两次
第二个好处:这样有利于访问速度
由于是连续存放的,连续的内存有益于提高访问速度,也有益于减少内存碎片。
cpu先去寄存器拿,拿不到再去缓存里去拿,再拿不到再去内存里去拿
当访问当前数据时,就会把周围的数据加载到寄存器当中去,在内存中存储是连续的话,命中率会高一些