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

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

什么是柔性数组

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

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

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

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

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

{
int num;
int *arr;
};

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

柔性数组的优势

第一个好处:方便内存释放
柔性数组的方案释放一次,指针方案释放两次
第二个好处:这样有利于访问速度
由于是连续存放的,连续的内存有益于提高访问速度,也有益于减少内存碎片。
cpu先去寄存器拿,拿不到再去缓存里去拿,再拿不到再去内存里去拿
当访问当前数据时,就会把周围的数据加载到寄存器当中去,在内存中存储是连续的话,命中率会高一些
相关文章
|
1月前
|
网络协议 编译器 Linux
【C语言】结构体内存对齐:热门面试话题
【C语言】结构体内存对齐:热门面试话题
|
6月前
|
编译器 C语言
C语言中柔性数组的讲解与柔性数组的优势
C语言中柔性数组的讲解与柔性数组的优势
|
6月前
|
存储 程序员 编译器
动态内存管理+柔性数组+经典笔试题
动态内存管理+柔性数组+经典笔试题
66 0
|
12月前
C进阶-动态内存管理+柔性数组(1)
C进阶-动态内存管理+柔性数组
39 0
|
12月前
|
编译器 C语言 C++
C进阶-动态内存管理+柔性数组(2)
C进阶-动态内存管理+柔性数组
47 0
|
编译器 C语言 C++
【C语言进阶】那些你必须掌握的C/C++要点——动态内存管理(1)
【C语言进阶】那些你必须掌握的C/C++要点——动态内存管理(1)
85 0
|
编译器 C语言
【C语言进阶(九)】常见内存错误以及柔性数组
【C语言进阶(九)】常见内存错误以及柔性数组
|
编译器 C语言
【C语言】一篇带你了解 柔性数组的意义与如何使用
【C语言】一篇带你了解 柔性数组的意义与如何使用
113 0
|
C语言
【C语言进阶篇】看完这篇结构体文章,我向数据结构又进了一大步!(结构体进阶详解)(下)
【C语言进阶篇】看完这篇结构体文章,我向数据结构又进了一大步!(结构体进阶详解)(下)
291 0
|
C语言 C++
进阶C语言 第五章-------《动态内存管理》 (malloc、free,calloc、realloc、柔性数组、C/C++程序在内存)知识点+完整思维导图+基本练习题+深入细节+通俗易懂+建议收藏(二)
进阶C语言 第五章-------《动态内存管理》 (malloc、free,calloc、realloc、柔性数组、C/C++程序在内存)知识点+完整思维导图+基本练习题+深入细节+通俗易懂+建议收藏(二)