【发布时间】:2011-05-14 19:08:33
【问题描述】:
我一直在尝试获取有关 C# 中堆栈数组的一些信息,而分配这种缓冲区的唯一方法是使用 不安全代码
char* buffer = stackalloc char[16];
作为一种解决方法,我可以制作一个字符结构。
struct Buffer16
{
public char c1,c2 //to 16
}
有没有办法通过创建新类型来不制作缓冲区。在运行时创建。
【问题讨论】:
-
您确定需要在堆栈上分配您的数组吗?
-
尝试将 C# 转换为 C 并没有多大意义。不妨使用 C。但这并不能阻止您这样做。你已经知道咒语了。
-
BTW:C# 中的
char表示 Unicode 字符。表示 8 位无符号整数的数据类型称为byte。 -
.NET 中引用类型的分配平均来说相当便宜,因为堆在收集期间被压缩。无需担心临时对象甚至临时缓冲区;这很少会成为您的瓶颈。
-
@Hans stackalloc 非常棒,因为您不必担心 GC 和 pinning。这是我会使用的原因之一,它对于指针操作来说很快。