【发布时间】:2014-02-12 22:27:24
【问题描述】:
是否可以在 C# 中使用我未分配的内存?或者是否可以更改已创建数组的大小(但未分配内存)?
这是我的解决方案。这是更好的方法吗?
using System.Runtime.InteropServices;
class LengthOfArray
{
public int Length;
}
[StructLayout(LayoutKind.Explicit)]
class MyArray
{
[FieldOffset(0)]
public LengthOfArray LengthOfArray;
[FieldOffset(0)]
public byte[] Array = new byte[4];
}
internal class Program
{
private static void Main(string[] args)
{
var arr = new MyArray();
arr.LengthOfArray.Length = 1024;
}
}
以及如何最好地用字符串做类似的效果?
【问题讨论】:
-
除非你使用
unsafe。您的代码根本不会影响数组;数组是引用类型。 -
CLR 的存在是为了防止你做这样的事情。
-
了解您实际想要完成的工作可能会有所帮助,因为这似乎是一个非常糟糕的设计选择 (XY problem)。
-
你可以使用动态数组——比如 Collection
;这些类型可以预先分配到某个大小 - 并且它们会动态扩展(在后台,新的 Collection 被创建为更大的大小 + 一些未来的大小,旧的 Collection 被复制到新的 Collection . -
@dvnrrs 我没有在我的任何项目中使用此代码,我想学习语言功能。
标签: c# memory memory-management