You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET数组排序内存分配疑问及并行调用求和结果异常咨询

问题解答

问题1:.NET数组排序的内存分配问题

首先纠正一个误解:.NET中普通数组(非stackalloc创建的数组)是引用类型,实例存储在堆上,只有数组的引用(指针)会存储在栈上。

关于Array.Sort()的内存使用:这个方法是原地排序——它直接修改原数组的元素顺序,不会为排序后的结果分配新的内存空间,整个排序过程都在原数组的内存区域内完成,不会产生新的数组实例。

问题2:并行任务输出均为0的原因

你的代码里,数组nums包含了从-10000到10000的所有整数(共20001个),不管元素顺序如何,它们的总和始终是0(正负数值完全抵消)。

教材中提到task1输出会波动,是因为教材里的数组总和本身不是固定值——比如如果数组是无负数的序列,排序过程中task1读取到部分排序的数组,就会得到错误的中间总和。但你的数组总和天然为0,哪怕task1在task2排序的中途读取数组,不管读取到的是部分排序的状态还是原状态,所有元素的加和结果都是0,所以两个任务的输出始终是0。

另外需要注意:这段代码存在数据竞争——两个并行任务同时访问和修改同一个数组(task2修改数组,task1读取数组),这在.NET中属于未定义行为。只是因为你的数组总和特殊,才表现出稳定的0输出;如果换成其他数组,结果就会像教材里那样不可预测。

内容的提问来源于stack exchange,提问作者Yassir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 15:46:11