我一直在尝试获取关于C#中堆栈数组的信息,而分配此类缓冲区的唯一方法是使用不安全代码
char* buffer = stackalloc char[16];
作为一种解决方法,我可以创建一个字符结构。
struct Buffer16
{
public char c1,c2 //to 16
}
有没有一种方法可以使缓冲区不通过创建新类型来实现。在运行时创建。
您可以将指针转换为原始类型指针或结构体:
char* buffer = stackalloc char[16];
int* i = (int*) buffer;
long* l = (long*) buffer;
byte* b = (byte*) buffer;
Point* p = (Point*) buffer;
那么你拥有所有的灵活性。你还可以使用 Marshal.PtrToStructure
来进行反向操作,而无需使用不安全的代码。
这个回答了你的问题吗?
我不相信有一种方法可以轻松地完成它。
C#通常旨在防止对内存资源进行微观管理,并且往往会费尽心思,使CLR的内存管理器成为除黑盒外的任何东西。这样做的一个重要原因是内存管理器通常非常出色,当您不干扰它时,它会发挥最佳效果。总的来说,我不会感到惊讶,如果将缓冲区放入堆栈而不是堆中,实际上并没有真正的性能优势。
char
代表一个Unicode字符。表示8位无符号整数的数据类型称为byte
。 - dtb