(T)의 크기 == (정조 T)의 크기 및 (T)의 정렬 == (정조 T)의 정렬 여부
다음과 같이 추정하는 것이 타당해 보입니다.T
그리고.const T
크기가 같고 정렬이 같은 두 가지 유형일 것입니다. 하지만 실제 시스템에 대해 생각해 본 결과, 이들은 다를 수 있을 것으로 보입니다.
제가 설명해 드리겠습니다.
RAM과 Flash(읽기 전용) 두 가지 유형의 메모리가 있는 시스템이 있다고 가정합니다.RAM은 8비트 어드레싱이 가능한 반면 플래시는 16비트 어드레싱만 가능합니다.이것이T
:
struct T
{
uint8_t x;
uint16_t y;
};
바이트 어드레싱 가능 RAM에서는 이 구조가 3바이트 길이일 것입니다. 하지만 더블 바이트 어드레싱 가능 플래시에서는 (여기서 a는const
변수가 상주합니다) 이 구조물은 정렬 문제 때문에 최소 4바이트 이상이어야 합니다.
그래서 제 질문은 다음과 같습니다.
c 및 c++ 표준이 크기 및 정렬을 보장합니까?const
그 외의const
유형?
섹션 3.9.3:
형식의 cv-qualified 또는 cv-unqualified 버전은 별개의 형식이지만 동일한 표현 및 정렬 요구사항을 가져야 합니다(3.11). 53
여기서 "cv-qualified"는 다음을 나타냅니다.const
그리고.volatile
. 대답은 그렇다 입니다.
const
그리고.volatile
지정한 개체에 대한 액세스 제한/속성만 지정합니다.기본 유형 자체의 일부로 간주되지 않으므로 유형의 속성에 영향을 줄 수 없습니다.
예, 이는 [basic.type.qualifier] / 1에 의해 보장됩니다.
형식의 cv-적격 또는 cv-비적격 버전은 별개의 형식이지만 동일한 표현 및 정렬 요건을 가져야 합니다(3.11).
바이트 주소 지정 RAM에서는 이 구조가 3바이트 길이입니다. 하지만 이중 바이트 주소 지정 플래시(정규 변수가 있는 위치)에서는 정렬 문제 때문에 이 구조가 최소 4바이트 길이여야 합니다.
그러나 컴파일러는 그것이 단지 그것이라고 추론할 수는 없습니다.const
여기, ROM에 저장됩니다.이런 걸 막을 수 있는 게 많아요mutable
, 아니면 당신은 단지 역동적으로 위치시킬 수 있습니다.const T
스택에 저장하거나 RAM 또는 천 개의 다른 것들의 힙 메모리에 수동으로 저장합니다.당신은 또한 당신이를 가질 수 있습니다.const T&
어느 위치에 있을 수도 있습니다
언급URL : https://stackoverflow.com/questions/38799924/does-sizeoft-sizeofconst-t-and-alignoft-alignofconst-t
'programing' 카테고리의 다른 글
XML 저장 및 형식 보존을 위한 Powershell (0) | 2023.09.16 |
---|---|
각 열에 대한 합계로 데이터 프레임에 행 추가 (0) | 2023.09.16 |
Excel 피벗 테이블에서 "Grand Total" 열로 정렬하시겠습니까? (0) | 2023.09.16 |
Submodule로 Subversion 저장소를 가질 수 있습니까? (0) | 2023.09.11 |
중복된 행의 인덱스 찾기 (0) | 2023.09.11 |