🧸🧸🧸各位大佬大家好,我是猪皮兄弟🧸🧸🧸
今天带来的内容是柔性数组。
🚀什么是柔性数组
结构体中,最后一个元素允许是未知大小的数组,这就叫做【柔性数组】成员
struct S
{
int num;
double d;
int arr[];
}
struct S
{
int num;
double d;
int arr[0];
}
🚀柔性数组的特点
柔性数组特点: ~结构中的柔性数组成员前必须至少有一个其他成员。 ~sizeof()返回的这种结构大小不包括柔性数组的内存 柔性数组~包含柔性数组的结构用malloc()函数进行内存的动态分配,并且分配的内存应该大于结构体的大小,以适应柔性数组的预期大小,他们在内存上是连续的。
🚀指针能做到为什么非要用柔性数组呢
用指针也可以做到这种效果,那么为什么会有柔性数组这种方案呢 比如:
struct S1
{
int num;
int arr[];
};
柔性数组,空间上是连续的
struct S2
{
int num;
int *arr;
};
指针来实现,num和arr所指向的空间可能是不连续的 实现上的细节是有差异的,但是也能达到想要的效果
🚀柔性数组的优势
柔性数组的优势:
第一个好处:方便内存释放 柔性数组的方案释放一次,指针方案释放两次 第二个好处:这样有利于访问速度 由于是连续存放的,连续的内存有益于提高访问速度,也有益于减少内存碎片。 cpu先去寄存器拿,拿不到再去缓存里去拿,再拿不到再去内存里去拿 当访问当前数据时,就会把周围的数据加载到寄存器当中去,在内存中存储是连续的话,命中率会高一些
🚀五彩斑斓的一些废话
???????创作不易,提前感谢各位老铁的一键三连,我会和大家一起进步,拿下offer。如果觉得这篇文章有什么帮助的话,👈👇👉点点点。谢谢大家的支持,你的支持就是我前进的动力!!!
|