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

探究.NET 461中ReadOnlyMemory<T> Length属性的按位与代码原因

为什么ReadOnlyMemory.Length要和int.MaxValue按位与

首先得明确,int.MaxValue的二进制是0x7FFFFFFF——32位整数里最高位是0,剩下31位全是1。

在.NET 4.6.1的ReadOnlyMemory<T>实现里,_length字段不只是存实际内存长度:它的最高位被当成了一个标志位,用来存储额外状态(比如区分当前内存是指向托管数组、非托管内存,还是其他特殊来源)。

当对外提供Length属性时,我们只需要真实的长度数值,所以用this._length & int.MaxValue这个按位与操作,就能把最高位的标志位清掉,只留下低31位的有效长度。

举个直观例子:如果_length的二进制是10000000 00000000 00000000 00001010(最高位1代表特殊状态,低31位是10,也就是实际长度),和int.MaxValue(01111111 11111111 11111111 11111111)按位与后,结果就是00000000 00000000 00000000 00001010,也就是正确的长度10。

这种做法是典型的字段复用优化——不用额外加字段占用内存,靠现有字段的冗余位存储额外状态,对于ReadOnlyMemory<T>这种值类型来说,内存开销的优化很关键。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 18:09:56