我一直试图在C#中获取有关堆栈数组的一些信息,并且只能分配这种缓冲区的方法是使用不安全代码
char* buffer = stackalloc char[16];
作为一种解决方法,我可以制作一个字符结构。
struct Buffer16
{
public char c1,c2 //to 16
}
有没有办法通过创建新类型来建立缓冲区不。在运行时创建。
答案 0 :(得分:3)
您始终可以将指针强制转换为基本类型指针或结构:
char* buffer = stackalloc char[16];
int* i = (int*) buffer;
long* l = (long*) buffer;
byte* b = (byte*) buffer;
Point* p = (Point*) buffer;
所以你拥有所有的灵活性。您也可以使用Marshal.PtrToStructure
并反向,而不使用不安全的代码。
这会回答你的问题吗?
答案 1 :(得分:1)
我不相信没有办法在没有跳过篮球的情况下做到这一点。
C#通常旨在阻止内存资源的微观管理,并且往往会非常痛苦地将CLR的内存管理器视为黑盒子。其中很大一部分原因是内存管理器通常能够很好地完成它所做的事情,并且在您不受影响的情况下做得最好。通常情况下,如果无论如何都不会在堆栈而不是堆中放入缓冲区,那么我就不会感到惊讶。