5.1.2. 기본 데이터 유형

이 단원에서는 ARM C 및 C++에서 기본 데이터 유형을 구현하는 방법에 대해 설명합니다.

기본 데이터 유형의 크기와 정렬

Table 5.2에서는 기본 데이터 유형의 크기와 기본 정렬을 보여 줍니다.

Table 5.2. 데이터 유형의 크기와 정렬 

유형크기(비트)기본 정렬(바이트)
char81   (바이트 단위 정렬)
short162   (하프워드 단위 정렬)
int324   (워드 단위 정렬)
long324   (워드 단위 정렬)
long long648   (더블워드 단위 정렬)
float324   (워드 단위 정렬)
double648   (더블워드 단위 정렬)
long double648   (더블워드 단위 정렬)
모든 포인터324   (워드 단위 정렬)
bool (C++ 전용)81   (바이트 단위 정렬)
_Bool(C 전용[1])81   (바이트 단위 정렬)
wchar_t (C++ 전용)162   (하프워드 단위 정렬)

[1] stdbool.h를 사용하여 C에서 bool 매크로를 정의할 수 있습니다.

유형 정렬은 컨텍스트에 따라 다릅니다.

  • 지역 변수는 보통 레지스터에 보존되지만, 스택으로 스필되면 항상 워드 단위로 정렬됩니다. 예를 들어 스필된 지역 char 변수는 4의 정렬을 갖습니다.

  • 패킹된 유형의 기본 정렬은 1입니다.

자세한 내용은 구조체, 공용체, 열거 및 비트 필드를 참조하십시오.

정수

정수는 2의 보수 형식으로 표시됩니다. long long의 하위 워드는 리틀엔디안 모드의 하위 주소와 빅엔디안 모드의 상위 주소에 있습니다.

부동 소수점

부동 소수점 수량은 IEEE 형식으로 저장됩니다.

  • float 값은 IEEE 단일정밀도 값으로 나타냅니다.

  • doublelong double 값은 IEEE 배정밀도 값으로 나타냅니다.

doublelong double 수량의 경우 부호, 지수, 가수의 가장 중요한 부분을 포함하는 워드는 빅엔디안 모드의 하위 시스템 주소, 리틀엔디안 모드의 상위 시스템 주소에 저장됩니다. 자세한 내용은 부동 소수점 유형에 대한 연산을 참조하십시오.

배열과 포인터

다음 사항은 구성원에 대한 포인터를 제외하고 C 및 C++의 개체에 대한 모든 포인터에 적용됩니다.

  • 인접 바이트는 1씩 달라지는 주소를 가집니다.

  • NULL 매크로는 0의 값으로 확장됩니다.

  • 정수와 포인터 간에 캐스트해도 표현이 변경되지 않습니다.

  • 컴파일러는 함수에 대한 포인터와 데이터에 대한 포인터 사이의 캐스트에 대해 경고합니다.

  • size_t 유형은 unsigned int로 정의됩니다.

  • ptrdiff_t 유형은 signed int로 정의됩니다.

Copyright © 2007 ARM Limited. All rights reserved.ARM DUI 0348AK
Non-Confidential