189得票6回答
`stackalloc`关键字的实际应用

有没有人在使用C#编程时真正使用过stackalloc?我知道它的作用,但唯一出现在我的代码中的时候是偶然的,因为当我开始键入static时,智能感知就会建议使用它。 虽然这与stackalloc的使用场景无关,但实际上我在我的应用程序中进行了相当数量的遗留Interop,所以偶尔我可能会采...

53得票2回答
为什么零长度的stackalloc使得C#编译器允许有条件的stackalloc?

以下的“修复”对我来说非常令人困惑;这里的情况是根据大小有条件地决定使用堆栈还是租用缓冲区,这是一种相当小众但有时必要的优化。然而,对于“显而易见”的实现(第3种,在我们实际想要分配它之前推迟明确的赋值),编译器会报告CS8353错误: “Span类型的stackalloc表达式的结果不能在此...

43得票1回答
这个不安全的代码在 .NET Core 3 中也能工作吗?

我正在重构我的库,使用Span<T>来避免可能的堆分配,但由于我也面向旧框架,因此我还实现了一些通用的备用方案。但现在我发现一个奇怪的问题,我不确定是我在 .NET Core 3 中发现了一个 bug 还是我在做一些非法操作。 问题:// This returns 1 as ex...

27得票7回答
何时需要在C#中使用stackalloc关键字?

stackalloc关键字提供了什么功能?何时和为什么我会想要使用它?

23得票2回答
C#和.NET:stackalloc

我对stackalloc运算符的功能有几个问题。 它是如何进行分配的?我认为它执行的操作类似于:void* stackalloc(int sizeInBytes) { void* p = StackPointer (esp); StackPointer += sizeInB...

16得票2回答
使用stackalloc分配内存的初始化

如果我在C#中使用stackalloc分配内存,那么这段内存是否会被初始化(使用0)?文档没有说明,只是说保留了正确的数量。 在我的测试中,这种内存默认为0,但并不意味着它是有保证的。

13得票4回答
为什么无法在引用类型中使用stackalloc?

如果在以下情况下使用stackalloc与引用类型var arr = stackalloc string[100]; 存在错误无法获取托管类型 ('string') 的地址、大小或声明指向其的指针为什么?为什么CLR不能声明指向托管类型的指针?

8得票1回答
.NET中对于stackalloc的缓冲区溢出保护

来自C# stackalloc的参考资料: 使用stackalloc会自动启用公共语言运行时(CLR)中的缓冲区溢出检测功能。如果检测到缓冲区溢出,则尽快终止进程,以最小化恶意代码执行的可能性。 具体而言,.NET实现了哪种保护机制? 它是否还会检测缓冲区欠载? 对于哪些已知攻击,保护...