gpt4 book ai didi

C# 巨大的 2-dim 数组

转载 作者:太空狗 更新时间:2023-10-29 21:11:13 25 4
gpt4 key购买 nike

我需要在 C# WinForms 中连续声明超过 20000 个项目的方阵。我读到 32 位的 .Net 对象大小限制为 2GB,在 64 位操作系统中也是如此。因此,据我所知,唯一的答案是使用不安全的代码或使用 C++ 编译器构建的单独库。

这个问题对我来说是值得的,因为 ushort[20000,20000] 比 2GB 小,但实际上我什至不能分配 700MB 的内存。我的限制是 650MB,我不明白为什么 - 我有 32 位 WinXP 和 3GB 内存。我尝试使用 Marshal.AllocHGlobal(700<<20) 但它抛出 OutOfMemoryException,GC.GetTotalMemory 在尝试分配内存之前返回 4.5MB。

我只发现很多人说使用不安全的代码,但我找不到如何在堆中声明 2-dim 数组(任何堆栈都不能保存如此大量的数据)以及如何使用指针处理它的示例。它是不安全{}括号内的纯 C++ 代码吗?

附言。请不要问为什么我需要这么大的数组......但如果你愿意 - 我需要分析文本(例如书籍)并找到很多索引。所以答案是——单词之间的关系矩阵

编辑:有人可以提供一个在不安全代码中使用指针处理矩阵的小示例。我知道在 32 位下不可能分配更多空间,但我花了很多时间在谷歌上搜索这样的例子并没有发现任何东西

最佳答案

为什么需要一个巨大的二维数组?例如,您可以使用锯齿状数组 - ushort[][] - almost 来模拟它,而且您不会达到相同的单对象限制。当然,您仍然需要 buckets-o-RAM,因此暗示 x64...

        ushort[][] arr = new ushort[size][];
for(int i = 0 ; i < size ; i++) {
arr[i] = new ushort[size];
}

除此之外 - 您可能想看看稀疏数组、eta 向量和所有爵士乐。

关于C# 巨大的 2-dim 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2593760/

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