Tag:

C#和.NET:stackalloc

我有一些关于stackalloc运算符function的问题。 它是如何实际分配的? 我认为它的确如下: void* stackalloc(int sizeInBytes) { void* p = StackPointer (esp); StackPointer += sizeInBytes; if(StackPointer exceeds stack size) throw new StackOverflowException(…); return p; } 但我做了一些测试,我不确定它是如何工作的。 我们无法确切地知道它的作用以及它是如何做到的,但我想知道它的基础知识。 我认为堆栈分配(嗯,我确实相信它)比堆分配快。 那么为什么这个例子: class Program { static void Main(string[] args) { Stopwatch sw1 = new Stopwatch(); sw1.Start(); StackAllocation(); Console.WriteLine(sw1.ElapsedTicks); Stopwatch sw2 = new Stopwatch(); sw2.Start(); HeapAllocation(); Console.WriteLine(sw2.ElapsedTicks); } static […]

有没有办法在C#中检查运行时的堆栈变量?

有没有办法在运行时转储堆栈的内容? 我对父函数信息(名称,参数,行)感兴趣,我知道我可以使用StackTrace和StackFrame类。 但是,我还想获取堆栈中的变量(在调用当前执行的方法中声明的局部变量)。 由于Visual Studio调试器可以执行此操作,我认为可能有一种方法也可以在运行时在代码中执行此操作。 有这样的方式吗?