有人stackalloc在用 C# 编程时实际使用过吗?我知道它是做什么的,但它唯一一次出现在我的代码中是偶然的,因为static例如,当我开始输入时 Intellisense 会建议它。
stackalloc
static
虽然与 的使用场景无关,但stackalloc我实际上在我的应用程序中做了相当多的遗留互操作,所以我时不时可以求助于使用unsafe代码。但尽管如此,我通常会找到unsafe完全避免的方法。
unsafe
而且由于 .Net 中单个线程的堆栈大小约为 1Mb(如果我错了,请纠正我),我更加保留使用stackalloc.
是否有一些实际案例可以说:“这正是我不安全和使用的正确数量的数据和处理stackalloc”?
使用的唯一原因stackalloc是性能(用于计算或互操作)。通过使用stackalloc而不是堆分配的数组,您可以减少 GC 压力(GC 需要运行更少),您不需要将数组固定下来,它比堆数组分配更快,并且在方法上自动释放退出(堆分配的数组仅在 GC 运行时释放)。此外,通过使用stackalloc而不是本地分配器(如 malloc 或 .Net 等效项),您还可以在范围退出时获得速度和自动解除分配。
性能方面,如果使用stackalloc,由于数据的局部性,会大大增加 CPU 上缓存命中的机会。