小编典典

`stackalloc` 关键字的实际使用

all

有人stackalloc在用 C#
编程时实际使用过吗?我知道它是做什么的,但它唯一一次出现在我的代码中是偶然的,因为static例如,当我开始输入时 Intellisense 会建议它。

虽然与
的使用场景无关,但stackalloc我实际上在我的应用程序中做了相当多的遗留互操作,所以我时不时可以求助于使用unsafe代码。但尽管如此,我通常会找到unsafe完全避免的方法。

而且由于 .Net 中单个线程的堆栈大小约为 1Mb(如果我错了,请纠正我),我更加保留使用stackalloc.

是否有一些实际案例可以说:“这正是我不安全和使用的正确数量的数据和处理stackalloc”?


阅读 116

收藏
2022-08-21

共1个答案

小编典典

使用的唯一原因stackalloc是性能(用于计算或互操作)。通过使用stackalloc而不是堆分配的数组,您可以减少 GC 压力(GC
需要运行更少),您不需要将数组固定下来,它比堆数组分配更快,并且在方法上自动释放退出(堆分配的数组仅在 GC
运行时释放)。此外,通过使用stackalloc而不是本地分配器(如 malloc 或 .Net 等效项),您还可以在范围退出时获得速度和自动解除分配。

性能方面,如果使用stackalloc,由于数据的局部性,会大大增加 CPU 上缓存命中的机会。

2022-08-21