如何在没有初始化为null或0的对象的情况下创建数组?

时间:2015-05-19 07:28:41

标签: c# .net

byte[] buffer = new byte[500000];

使用0值初始化缓冲区。因为它是一个缓冲区,我不想要任何初始化,它是否可能在C#中与C一样?

3 个答案:

答案 0 :(得分:1)

我认为这是不可能的......即使FormatterServices.GetUninitializedObject没有运行构造函数:

  

因为对象的新实例初始化为零并且没有运行构造函数,所以该对象可能不表示该对象认为有效的状态。

请注意,如果您想要非托管(内存来自不受GC管理的操作系统), 可以在不归零的情况下进行分配,但它不会是byte[]

答案 1 :(得分:0)

使用随机数填写或使用Win32 API中的DllImportVirtualAlloc

答案 2 :(得分:0)

在C#中执行malloc在C中执行的操作的方法是在Marshal.AllocHGlobal上下文中使用unsafe

unsafe
{
    var ptr = Marshal.AllocHGlobal(50000 * sizeof(int));
    int* values = (int*)ptr;

    // lists uninitialized ints
    for (int i = 0; i < 50000; i++)
        Console.WriteLine(values[i]);

    Marshal.FreeHGlobal(ptr);
}