• 【C】关于柔性数组.简要的谈谈柔性数组


    🧸🧸🧸各位大佬大家好,我是猪皮兄弟🧸🧸🧸

    在这里插入图片描述

    今天带来的内容是柔性数组

    🚀什么是柔性数组

    结构体中,最后一个元素允许是未知大小的数组,这就叫做【柔性数组】成员

    struct S
    {
    	int num;
    	double d;
    	int arr[];//柔性数组成员
    }
    
    struct S
    {
    	int num;
    	double d;
    	int arr[0];//数组写成0,大小也是未知的,也是柔型数组
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    🚀柔性数组的特点

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

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

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

    struct S1
    {
    	int num;
    int arr[];
    	};
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    struct S2
    {
    int num;
    int *arr;
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    🚀柔性数组的优势

    柔性数组的优势:

    第一个好处:方便内存释放
    柔性数组的方案释放一次,指针方案释放两次
    第二个好处:这样有利于访问速度
    由于是连续存放的,连续的内存有益于提高访问速度,也有益于减少内存碎片。
    cpu先去寄存器拿,拿不到再去缓存里去拿,再拿不到再去内存里去拿
    当访问当前数据时,就会把周围的数据加载到寄存器当中去,在内存中存储是连续的话,命中率会高一些


    🚀

           创作不易,提前感谢各位老铁的一键三连,我会和大家一起进步,拿下offer。如果觉得这篇文章有什么帮助的话,👈👇👉点点点。谢谢大家的支持,你的支持就是我前进的动力!!!
    在这里插入图片描述

  • 相关阅读:
    常用压缩解压缩命令
    HTTP Header 参数详解
    Vue Slot插槽:组件化的艺术
    STM32H7B0 HAL库中关于DMA的注意事项以及DCMI调试遇到的问题及解决方法
    [python 刷题] 238 Product of Array Except Self
    PAM从入门到精通(十九)
    为给git设置代理
    python项目实战——银行取款机系统(二)
    Redis运行为什么快
    虚拟内存和页表
  • 原文地址:https://blog.csdn.net/zhu_pi_xx/article/details/126108716