gpt4 book ai didi

c# - 如何动态增加 C# 中固定数组的大小?

转载 作者:太空宇宙 更新时间:2023-11-03 18:38:21 24 4
gpt4 key购买 nike

我正在开发具有垃圾收集功能的基本 POC 虚拟机。我使用的语言是 C#,我使用 pinned 字节数组作为 VM 的内存。 .net GC 是否可以在不移动内存的情况下动态增加内存大小?

我使用的代码非常简单

byte[] _memory = new byte[2048];
var _gcHandle = GCHandle.Alloc(_memory, GCHandleType.Pinned);
var _memHandler = _gcHandle.AddrOfPinnedObject();

如果之后我想在代码中重新调整 _memory 的大小,我该怎么做而不取消固定它?我应该使用另一种技术吗?

最佳答案

If I want to re-size the _memory in the code afterwards, how would I do that without unpinning it?

没有可靠的方法可以做到这一点,也没有任何托管 API 可以实现它。问题是,一旦内存被钉住,就不能再移动了。调整数组的大小很可能需要在不同的位置进行分配(因为在当前位置可能没有足够大的连续内存块)。

因此,您需要取消固定内存、重新分配/调整大小,然后创建新的固定阵列。确保任何持有内存的 native 代码(这将是首先固定的原因)更新为不使用以前的内存位置。

关于c# - 如何动态增加 C# 中固定数组的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11937585/

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