mdspan

mdspan (std::mdspan — 다차원 배열 뷰)

std::mdspan은 C++23에서 도입된 비소유(non-owning) 다차원 배열 뷰예요. 연속 메모리를 다차원 인덱스로 접근할 수 있게 해 주며, span의 다차원 확장으로 볼 수 있어요.

출처: cppreference

본문

std::mdspan는 C++23에서 도입된 다차원 비소유 뷰예요. 하나의 연속 메모리 영역을 여러 차원의 인덱스로 매핑해 접근하게 해 줘요.

주요 특징은 다음과 같아요.

  • 포인터(데이터) + 각 차원의 크기(extents) + 레이아웃 매핑(mapping) + 접근자(accessor)로 구성돼요.
  • 기본 레이아웃은 행 우선(row-major, layout_right)과 열 우선(layout_left)을 제공해요.
  • 모든 차원의 크기를 런타임에 정할 수도(dextents), 컴파일 타임에 정할 수도 있어요(extents<...>).
  • 소유하지 않으므로 수명 관리는 사용자가 해야 해요.
  • 선형 대수, 이미지 처리, 텐서 계산 등 다차원 데이터를 다루는 용도로 설계됐어요.

템플릿 매개변수

  • ElementType: 원소 타입.
  • Extents: 차원 크기(extents) 타입.
  • LayoutPolicy: 레이아웃 매핑 정책 (layout_right, layout_left, layout_stride 등).
  • AccessorPolicy: 원소 접근 정책.

멤버 타입

  • element_type, value_type, size_type, difference_type
  • index_type, rank_type, layout_type, accessor_type, mapping_type
  • pointer, reference, const_reference

멤버 함수

  • 생성자, operator=
  • 관찰자: rank, rank_dynamic, extent(r), extents, size, mapping, accessor, data_handle
  • 접근: operator[] (다차원 인덱스), stride

참고

mdspan은 소유하지 않는 뷰이므로, 원본 버퍼의 수명이 뷰보다 길어야 해요. std::mdarray(C++26)는 소유형 다차원 배열이에요.

더 알아보기 (Learn more)

cppreference