C#列表是否分配在连续的内存中?
如果我声明一个char数组列表,它们是在连续的内存中分配的还是.NET创建一个链表?
如果它不是连续的,有没有办法我可以声明连续的char数组列表? char数组的大小提前知道并且是固定的(它们都是相同的大小). 解决方法
是的,但不是你想要的方式.列表与LT; T>保证其元素连续存储.
数组是一个参考类型,因此引用被一致地存储为List< T>担保.但是,数组本身分开分配,存储在哪里与列表无关.它只关心其元素,参考. 如果您需要,那么您应该简单地使用一个大阵列并保留边界数据. 编辑:根据您的意见:
因此,在这种情况下,高速缓存一致性可能是一个问题,因为子阵列很小.你将会从一个阵列到另一个阵列的内存中跳跃很多,我??只想介绍一下这个代码的性能敏感性. 只要使用多维即可.这当然假定你知道大小,或者你可以强加一个最大的大小. 可以交换一些内存来减少复杂性/时间,只需设置N的最大大小?使用多维数组(但不使用后者)是保证连续分配的唯一方法. 编辑2: 试图让答案与评论同步.你说第一维的最大尺寸是9!如前所述,第二维度的大小为9. 把它全部分配在前面.你正在交易一些记忆. 9! * 9 * 2/1024/1024 ==?6.22MB. 正如你所说,列表可能会增长到那个大小,所以最坏的情况下,你浪费了几MB的内存.我不认为这是一个问题,除非你打算在烤面包机上运行这个代码.只需将缓冲区分配为一个阵列,您就可以. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |