오늘 @Vincent 님 덕분에 List<T>
구현을 살펴볼 수 있었는데, CollectionsMarshal.AsSpan()
이 되려 List<T>
를 처리할 수 있었던 이유는 List<T>
의 구현이 연속된 배열
이기 때문입니다.
CollectionsMarshal.AsSpan()
의 구현을 보면 단순히
List<T>
의 내부 연속 배열을 Span<T>
로 변경했음을 알 수 있습니다.
public static Span<T> AsSpan<T>(List<T>? list)
=> list is null ? default : new Span<T>(list._items, 0, list._size);
그러니 연속된 메모리만
Span<T>
의 후보가 된다는 점은 변함이 없네요. ^^;
3개의 좋아요