我正在尝试使用C#的不安全功能:http://ideone.com/L9uwZ5
我知道,在C#中这种方法是最差的,我想承认一下,在主题中有一些信息。看看“perversion”这个词。
我想以纯C的方式(甚至没有C++)在C#中实现快速排序。这可能有点疯狂,但我只是想深入了解不安全的C#的可能性。
我一直试图使用stackalloc运算符。我知道它是从堆栈而不是堆中分配内存,这就是为什么我的程序执行失败的原因。
但是当我没有在程序中看到任何异常/错误时,我感到困惑。
- 为什么我没有收到任何明确的异常/错误?
另外,正如您所看到的代码的注释部分:
struct Header
{
internal int* data;
};
Header* object_header = stackalloc Header[sizeof(Header)];
object_header->data = stackalloc int[length];
我无法使用最后一行编译它。C#编译器告诉我,在这个表达式stackalloc中不能使用。为什么呢?数据是int*类型,那么为什么在这里出现错误?
我只想使用堆栈帧而不是使用堆。
我知道还有另一种方法,但那是从堆中分配的。
int*[] data = new int*[length * sizeof(int)];
IntPtr result = Marshal.AllocHGlobal(Marshal.SizeOf(length * sizeof(int)));
Marshal.WriteInt32(result, 0);
for(int i = 0; i < length * sizeof(int); i++) d[i] = (int*)result;
例如,但这不是堆栈分配。
在C#语言中,我如何使用堆栈分配和纯C风格的语法明确解决我的反常任务。
我知道C#并不是为此而创建的,这样的功能很愚蠢,但主要问题不在于重要性,而在于这些功能。