> 백엔드 개발 > C++ > C 표준은 `std::array`의 크기와 메모리 레이아웃을 보장합니까?

C 표준은 `std::array`의 크기와 메모리 레이아웃을 보장합니까?

Barbara Streisand
풀어 주다: 2024-11-24 10:49:12
원래의
500명이 탐색했습니다.

Does the C   Standard Guarantee the Size and Memory Layout of `std::array`?

std::array의 크기는 표준에 의해 강제됩니까?

C 11에서 std::array는 연속성을 보장합니다. 일반 어레이를 능가하거나 그와 동등한 성능을 제공합니다. 그러나 질문은 남아 있습니다. 표준이 std::array의 크기와 메모리 레이아웃을 명시적으로 정의합니까?

표준 요구 사항 탐색

표준은 std::를 정의합니다. 다음 구문을 사용하여 초기화할 수 있는 집계로서의 배열:

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

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

예상 동작에서 가능한 편차

기술적으로 표준은 특정 잠재적 편차를 금지하지 않습니다.

  • 보조 데이터 저장: std::array 지정된 값을 초과하는 추가 메모리를 예약할 수 있으므로 데이터가 배열 경계를 넘어 기록된 경우 오류 감지가 가능합니다.
  • 정렬 차이점: 컴파일러는 비교된 std::arrays에 고유한 정렬 또는 패딩을 적용할 수 있습니다. 특히 고급 정렬 요구 사항을 지원하기 위한 내장 어레이입니다.

컴파일러 변형

표준의 모호함에도 불구하고 GNU 및 Intel과 같은 주요 컴파일러의 실제 사용에 따르면 std::array의 크기와 메모리 레이아웃은 일반 배열의 크기와 메모리 레이아웃을 반영합니다.

std::vector< std::array<int, N> > x(M);
typedef int (*ArrayPointer)[N];
ArrayPointer y = (ArrayPointer) &x[0][0];
// Safe multidimensional array-like usage
로그인 후 복사

이 코드는 예상대로 작동하지만 모든 구현이 이 패턴을 따른다는 보장은 없습니다. 따라서 업무상 중요한 코드에서는 이 동작에 의존하는 것이 바람직하지 않습니다.

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

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