在我的 net 8 应用程序中,我使用 Span/stackalloc 来快速分配一些数据结构。我使用以下模式
float[] myDataRent = null;
Span<float> myData = numberToAllocate <= maxStackAllocSize ? stackalloc float[numberToAllocate] : (myDataRentRent = ArrayPool<float>.Shared.Rent(numberToAllocate));
...
if( myDataRent != null )
ArrayPool<float>.Shared.Return( myDataRent );
我的性能测量显示 stackalloc 具有非常高的性能增益,因此我更愿意尽可能使用堆栈分配。因此我需要知道 maxStackAllocSize 的最大安全值。
那么 64 位网络核心进程的默认堆栈大小是多少?根据我读到的内容,它应该是 4 mb(然后我认为 2 mb 可以安全地用于 stackalloc),但是 GetCurrentThreadStackLimits 检查给了我接近 1.5 mb 的值,而不是一个非常整数。不知道我是否可以相信它。