프로그래밍/C,C++

enum 크기

MAKGA 2021. 10. 6. 22:33
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