栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么数组不可扩展?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么数组不可扩展?

这个问题没有提到语言,因此我将选择基于“ C”的数组作为答案。

数组被分配为单个内存块。增长数组是有问题的,因为正确执行此操作的唯一方法是在最后增长它。为了增加大小N,在数组的末尾必须在下一个分配的地址之前至少有N个空闲字节。

要支持这种类型的分配,必须在虚拟地址空间中分配分配。这既消除了使内存分配彼此更接近的好处,又增加了碎片的产生。面对大多数试图将内存打包在一起并减少碎片的内存管理器,这是不对的。

在内存中有足够空间的地方分配一个新数组并复制该数组,这根本不是一般解决方案。原因是该数组的先前位置对用户而言可以通过指针看到。

int* array = malloc(int*someSize);int* pointer1 = &(arr[2]);growArray(&array, 12);  // Can't move because pointer1 knows the address of the array


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/454624.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号