.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
时被固定。
也许答案是“取决于使用了哪个构造函数”?
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#'sfixed
statement.
从中我们可以再次推断出一个对象不是单独由 Span<T>
固定,而是在使用 fixed
时被固定。