.Net System.Span<T>:它是否固定底层对象并保护它免于压缩?

.Net System.Span<T>: does it pin the underlying object and protect it from compaction?

也许答案是“取决于使用了哪个构造函数”?

Span<T>(Void*, Int32):我确定它不会(不能)固定... Span<T>(T[]) 和它的表亲 Span<T>(T[], Int32, Int32) 怎么样?

“固定”是指 How can I pin an array of byte?

不,Span<T> 没有固定任何东西。如果是这样,Span<T>.GetPinnableReference() 的意义何在?

请注意 GetPinnableReference() 的文档说

Applications should not directly call GetPinnableReference. Instead, callers should use their language's normal pinning syntax, such as C#'s fixed statement.

从中我们可以再次推断出一个对象不是单独由 Span<T> 固定,而是在使用 fixed 时被固定。