byte[] buffer = new byte[500000];
使用0值初始化缓冲区。因为它是一个缓冲区,我不想要任何初始化,它是否可能在C#中与C一样?
答案 0 :(得分:1)
我认为这是不可能的......即使FormatterServices.GetUninitializedObject没有运行构造函数:
因为对象的新实例初始化为零并且没有运行构造函数,所以该对象可能不表示该对象认为有效的状态。
请注意,如果您想要非托管(内存来自不受GC管理的操作系统), 可以在不归零的情况下进行分配,但它不会是byte[]
。
答案 1 :(得分:0)
使用随机数填写或使用Win32 API中的DllImport
和VirtualAlloc
。
答案 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);
}