当前位置: 首页 > news >正文

搜狐快站网上合同

搜狐快站,网上合同,扬州市建设局网站 竣工备案,松原市住房和城乡建设局网站柔性数组1. 柔性数组介绍2. 柔性数组特点3. 用例3.1 代码一:3.2 代码二:4. 柔性数组优势:1. 柔性数组介绍 也许你从来没有听说过柔性数组(flexible array)这个概念,但是它确实是存在的。 C99 中&#xff0c…

柔性数组

  • 1. 柔性数组介绍
  • 2. 柔性数组特点
  • 3. 用例
    • 3.1 代码一:
    • 3.2 代码二:
  • 4. 柔性数组优势:

1. 柔性数组介绍

也许你从来没有听说过柔性数组(flexible array)这个概念,但是它确实是存在的。

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

例如:零长度数组概念

struct S
{int n;char c;int arr[];//柔性数组成员
};

有些编译器无法编译,可以改成:

struct S
{int n;char c;int arr[0];//柔性数组成员
};

2. 柔性数组特点

  • 结构中的柔性数组成员前面必须至少一个其他成员。

  • sizeof 返回的这种结构大小不包括柔性数组的内存。

  • 包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,
    以适应柔性数组的预期大小。

3. 用例

3.1 代码一:

在这里插入图片描述

//代码一:
struct S
{int n;char c;int arr[];
};
int main()
{struct S* ps = (struct S*)malloc(sizeof(struct S) + 10 * sizeof(int));//设置int arr数组元素为10个,10*sizeof(int)if (ps == NULL){printf("%s\n", strerror(errno));return 1;}ps->n = 100;ps->c = 'w';for (int i = 0;i < 10;i++){ps->arr[i] = i;}for (int i = 0;i < 10;i++){printf("%d\n", ps->arr[i]);}free(ps);ps = NULL;
}

3.2 代码二:

在这里插入图片描述

//代码二:
struct S
{int n;char c;int* arr;
};int main()
{struct S* ps = (struct S*)malloc(sizeof(struct S));if (ps == NULL){perror("malloc");return 1;}int*ptr = (int*)malloc(10 * sizeof(int));//设置int arr数组元素为10个,10*sizeof(int)if (ptr == NULL){perror("malloc2");return 1;}else{ps->arr = ptr;}//使用ps->n = 100;ps->c = 'w';int i = 0;for (i = 0; i < 10; i++){ps->arr[i] = i;}//打印for (i = 0; i < 10; i++){printf("%d ", ps->arr[i]);}//扩容 - 调整arr的大小ptr = realloc(ps->arr, 20 * sizeof(int));//增容int arr数组元素为20个,10*sizeof(int)if (ptr == NULL){perror("realloc");return 1;}else{ps->arr = ptr;}//使用ps->n = 100;ps->c = 'w';for (i = 0; i < 20; i++){ps->arr[i] = i;}//打印for (i = 0; i < 20; i++){printf("%d ", ps->arr[i]);}//释放free(ps->arr);ps->arr = NULL;free(ps);ps = NULL;return 0;
}

4. 柔性数组优势:

代码一和代码二都可以完成相同功能,但代码一有以下两个好处:

第一个好处是:方便内存释放。

如果我们的代码是在一个给别人用的函数中,你在里面做了二次内存分配,并把整个结构体返回给用户。

用户调用free可以释放结构体,但是用户并不知道这个结构体内的成员也需要free,所以你不能指望用户来发现这个事。

所以,如果我们把结构体的内存以及其成员要的内存一次性分配好了,并返回给用户一个结构体指针,用户做一次free就可以把所有的内存也给释放掉。
在这里插入图片描述

第二个好处是:这样有利于访问速度。

连续的内存有益于提高访问速度,也有益于减少内存碎片。

(其实,我个人觉得也没多高了,反正 你跑不了要用做偏移量的加法来寻址)

补充:局部性原理:

  • 局部性原理是计算机科学中的一种基本原理,指的是程序中的指令和数据在执行时会集中在较小的一部分存储器中,并且在短时间内重复使用。这种局部性表现在两个方面:时间局部性和空间局部性。

  • 时间局部性指的是,某个数据或指令一旦被使用,在短时间内会被多次使用。例如,在循环结构的程序中,循环体内的指令会被反复执行。

  • 空间局部性指的是,某个数据或指令的使用会对其周围的数据与指令产生影响,这些数据和指令也会在短时间内被多次使用。例如,在数组操作中,相邻的元素都会被频繁地访问。

  • 局部性原理的应用可以提高计算机系统的性能,例如通过缓存技术和虚拟内存技术,让系统可以快速地访问常用的数据和代码,从而减少了额外的访问时间和存储开销。

👊👊👊
感谢阅读!

http://www.yayakq.cn/news/908828/

相关文章:

  • 网站建站前期准备工作有创意营销型网站建设
  • 西安哪家网站做的好wordpress cdn无作用
  • 珠海住建网站郑州小程序制作流程及费用
  • 免费在线做高考试题的网站成都最新消息今天
  • 三水网站建设公司建设机械网站制作
  • 单县住房和城乡建设局网站近三天时政热点
  • asp.net 网站安装包网站被黑的表现
  • 小公司做网站的好处用jsp做的网站源代码下载
  • 嘉兴做网站的服务好的徐州网站建设
  • 山西省建设厅招标网站首页品牌便宜网站建设
  • 用python做网站google海外版
  • 怎么做淘宝客网站备案wordpress yum
  • 怎么上国外网站企业年报网上申报入口免费官方
  • 深圳网站网络推广公司购物帮做特惠的网站
  • dw做的上传网站打不开seo短视频入口
  • 自己做个购物网站wordpress免刷新插件
  • 淘宝店铺怎么运营网络seo
  • 石家庄行业网站建设网站建设的详细步骤
  • 公司做网站排名移动网站建设初学视频教程
  • nas可以做网站服务器做资源网站
  • 深圳成交型网站建设网站文章更新注意什么
  • 网站开发管理学什么网站建设方案书怎么写样版
  • 富阳网站优化手机网站建设报价
  • 高安建站公司厦门单位网站建设
  • 毕业设计题网站开发科技之星
  • 公司网站建设p开发怎么去推广自己的公司
  • ai做网站外汇交易平台网站建设
  • 云南住房建设厅网站芜湖的互联网公司
  • 制作网页和网站有啥不同昆明网站建设建站技巧
  • 山西网站制作公司已有网站 需要整改 怎么做