> 백엔드 개발 > C++ > C 표준은 `std::array`에 대해 내장 배열과 동일한 크기 및 메모리 레이아웃을 보장합니까?

C 표준은 `std::array`에 대해 내장 배열과 동일한 크기 및 메모리 레이아웃을 보장합니까?

Linda Hamilton
풀어 주다: 2024-11-19 22:36:03
원래의
1031명이 탐색했습니다.

Does the C   Standard Guarantee the Same Size and Memory Layout for `std::array` as for Built-in Arrays?

C 표준은 std::array의 크기를 정의합니까?

C 11에서 std::array는 성능이 비슷한 연속 스토리지를 제공합니다. 일반 배열로. 그러나 std::array의 크기와 메모리 레이아웃이 일반 배열과 동일한지는 확실하지 않습니다.

표준 요구 사항

C 표준(§23.3.2.1/2) 다음을 통해 초기화된 집계로 배열을 정의합니다.

array<T, N> a = { initializer-list };
로그인 후 복사

집계로서, std::array는 생성자를 사용하여 초기화 목록의 데이터를 변환할 수 없습니다. 이는 주로 실제 데이터 값을 저장한다는 것을 의미합니다.

잠재적인 구현 관련 동작

기술적으로 std::array는 보조 데이터를 포함하거나 포함하지 않을 수 있습니다. -일반적인 배열의 동작에서 벗어나는 표준 정렬.

예를 들어, 컴파일러는 다음을 추가할 수 있습니다. 범위를 벗어난 쓰기 시도를 감지하기 위한 std::array 끝에 센티넬 값. 또는 수퍼 정렬(예: Intel SSE 명령어)은 std::array에서 지원되지만 내장 배열에서는 지원되지 않을 수 있습니다.

예상되는 동작

일반적으로 다음 코드는 의도한 대로 작동할 것으로 예상할 수 있습니다.

std::vector< std::array<int, N> > x(M);
typedef int (*ArrayPointer)[N];
ArrayPointer y = (ArrayPointer) &amp;x[0][0];
// Use y as a multidimensional array
로그인 후 복사

대부분의 컴파일러 (예: GNU 및 Intel)은 이 동작을 준수합니다. 그러나 표준은 std::array 및 일반 배열에 대해 동일한 메모리 레이아웃을 명시적으로 보장하지 않는다는 점에 유의하는 것이 중요합니다.

위 내용은 C 표준은 `std::array`에 대해 내장 배열과 동일한 크기 및 메모리 레이아웃을 보장합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿