320x100
보통 enum의 size를 측정해보면 4byte로 계산된다.
enum A {
AA
};
std::cout << sizeof(A); // 4
하지만 다음과 같이 enum에 type을 부여해주고 사용한다면 어떻게 될까?
enum A : short {
AA
};
std::cout << sizeof(A);
역시 4가 나온다. 물론 컴파일러에 따라 다르겠지만 기본적으로 enum은 4바이트를 차지하며, 값에 따라 8바이트로 증가는 가능하지만 4바이트 미만으로는 줄어들진 않는다.
Visual Studio 2017 15.3 이상 버전(C++17) 이상에서는 enum에 타입을 부여하면 위와 같이 코드를 작업했을 때 해당 타입으로 선언된다.
https://docs.microsoft.com/en-us/cpp/cpp/enumerations-cpp?view=msvc-160
enum A {
AA
};
enum class B {
BB
};
enum C : short {
CC
};
enum class D : char {
DD
};
int main() {
std::cout << sizeof(A) << std::endl; // 4
std::cout << sizeof(B) << std::endl; // 4
std::cout << sizeof(C) << std::endl; // 2
std::cout << sizeof(D) << std::endl; // 1
}
아래 내용은 컴파일러에 관한 내용 같다. 내용은 안맞지만 기왕 찾은거 남겨두자.
아래 내용은 따로 테스트 해보진 않았지만 enum의 크기를 변경할 수 있는 방법들을 찾아본 내용이다.
1. --small_enum 옵션 활성화
해당 옵션을 활성화 하면 enum에 대한 가장 작은 크기가 사용된다.
다음 enum은 32bit 대신 8bit를 사용한다.
enum example_enum { first = -128, second = 0, third = 127 };
다음 enum은 32bit 대신 16bit를 사용한다
enum a_short_enum { bottom = -32768, middle = 0, top = 32767 };
https://downloads.ti.com/docs/esd/SPRUI04C/size-of-enum-types-spru1876797.html
https://dh8.kr/workshop/hwworkshop_intermediate/hw4swd/docs/spnu151h.pdf
320x100
'프로그래밍 > C,C++' 카테고리의 다른 글
Multibyte ↔ UNICODE ↔ UTF8 변환하기 (0) | 2021.10.15 |
---|---|
inet_pton(), inet_ntop() (0) | 2021.10.09 |
자주 사용하는 함수 (0) | 2021.07.30 |
[C++] 동적 배열을 이용한 stack (0) | 2021.06.30 |
[C++] Object pool (0) | 2021.06.29 |