gpt4 book ai didi

c# - C# List 是否分配在连续内存中?

转载 作者:可可西里 更新时间:2023-11-01 09:01:12 25 4
gpt4 key购买 nike

如果我声明一个 char 数组列表,它们是分配在连续的内存中,还是 .NET 创建一个链接列表?

如果它不是连续的,有没有办法声明一个连续的 char 数组列表? char 数组的大小是预先知道的并且是固定的(它们的大小都相同)。

最佳答案

是的,但不是您想要的方式。 List<T>保证 它的元素 是连续存储的。

数组是引用类型,因此引用 连续存储为List<T>保证。但是,数组本身是单独分配的,它们的存储位置与列表无关。它只关心它的元素,即引用。

如果您需要,那么您应该只使用一个大数组并维护边界数据。

编辑:根据您的评论:

The inner arrays are always 9 chars.

因此,在这种情况下,缓存一致性可能是一个问题,因为子数组非常小。从一个数组到下一个数组,您会在内存中跳来跳去,我只接受您关于这段代码的性能敏感性的话。

如果可以,就使用多维。当然,这假设您知道大小或者您可以对其施加最大大小。

是否可以交换一些内存以降低复杂性/时间,并为 N 设置最大大小? ?使用多维数组(但不要使用后者)是保证连续分配的唯一方法。

编辑 2:

努力使答案与评论保持同步。你说第一维的最大尺寸是9!和之前一样,第二个维度的大小是 9。

预先分配所有内容。您正在用一些内存换取时间。 9! * 9 * 2/1024/1024 == ~6.22MB。

正如您所说,列表可能会增长到那个大小,所以最坏的情况是您浪费了几 MB 的内存。我认为这不会成为问题,除非您计划在 toastr 中运行此代码。只需预先将缓冲区分配为一个数组即可。

关于c# - C# List<char[]> 是否分配在连续内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18680130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com