加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#列表是否分配在连续的内存中?

发布时间:2020-12-15 03:42:13 所属栏目:百科 来源:网络整理
导读:如果我声明一个char数组列表,它们是在连续的内存中分配的还是.NET创建一个链表? 如果它不是连续的,有没有办法我可以声明连续的char数组列表? char数组的大小提前知道并且是固定的(它们都是相同的大小). 解决方法 是的,但不是你想要的方式.列表与LT; T保证
如果我声明一个char数组列表,它们是在连续的内存中分配的还是.NET创建一个链表?

如果它不是连续的,有没有办法我可以声明连续的char数组列表? char数组的大小提前知道并且是固定的(它们都是相同的大小).

解决方法

是的,但不是你想要的方式.列表与LT; T>保证其元素连续存储.

数组是一个参考类型,因此引用被一致地存储为List< T>担保.但是,数组本身分开分配,存储在哪里与列表无关.它只关心其元素,参考.

如果您需要,那么您应该简单地使用一个大阵列并保留边界数据.

编辑:根据您的意见:

The inner arrays are always 9 chars.

因此,在这种情况下,高速缓存一致性可能是一个问题,因为子阵列很小.你将会从一个阵列到另一个阵列的内存中跳跃很多,我??只想介绍一下这个代码的性能敏感性.

只要使用多维即可.这当然假定你知道大小,或者你可以强加一个最大的大小.

可以交换一些内存来减少复杂性/时间,只需设置N的最大大小?使用多维数组(但不使用后者)是保证连续分配的唯一方法.

编辑2:

试图让答案与评论同步.你说第一维的最大尺寸是9!如前所述,第二维度的大小为9.

把它全部分配在前面.你正在交易一些记忆. 9! * 9 * 2/1024/1024 ==?6.22MB.

正如你所说,列表可能会增长到那个大小,所以最坏的情况下,你浪费了几MB的内存.我不认为这是一个问题,除非你打算在烤面包机上运行这个代码.只需将缓冲区分配为一个阵列,您就可以.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读