[질문] enum이 차지하는 메모리 공간?

ghzradio의 이미지


	struct 
	{
		enum MyEnum
		{
			FOO,
			BOO
		};
		MyEnum val;
	}str;
 
 
	printf("[%d]", sizeof(str));

인경우에 4가 나오던데요..(MSVC++ 6.0) 왜 4바이트밖에(?) 메모리를 차지하지 않는걸까요?

enum 타입의 내부적인 구현 원리, 컴파일러에서 처리방법, 바이너리 출력 파일에 적용되는 형태등이 궁굼합니다.

cyberhoon의 이미지

enum 형 변수는 int 타입으로 처리되는 것으로 알고 있습니다.
32-bit 운영체제라면 int 타입은 4바이트가 맞겠죠..

cococo의 이미지

제가 확인해 본 내용이 아니라 정답인지는 모르겠는데요.
ENUM이란 개념이, 데이터를 저장하기 위한 영역을 확보하기 위한 것 - structure 나 melloc 같은 - 개념이 아니라,
상수값을 문자로 표현하기 위한 개념 아닌가요?
그러니, 아무리 많은 enum의 element를 선언한다고 하더라도 실제 저장 영역을 확보할 때에는 컴파일러가 그 선언값을 전부 상수값으로 치환한 다음에 저장하니까,
32bit 시스템에서 int상수값이 4 byte니까 그런 게 아닐까 합니다.

행복은 희생없이는 얻을 수 없는 것인가?
시대는 불행없이는 넘을 수 없는 것인가?

drinkme의 이미지

제가 알기론 enum이 int size인 것은 아니지 싶습니다.

이 부분은 구현마다 틀린걸로 알고 있습니다.
일부 c 컴파일러에서는 이 부분이 알아서 최소크기로 할당되기도 합니다.
가령, ADS ARM cc에서는 enum이 1byte size를 가집니다.
항목 갯수가 많아지거나, 값을 지정한 경우에 2byte 또는 4byte가 되기도 하죠.

hongminhee의 이미지

C/C++에서 enum은 컴파일 타임에 정수 상수로 인라이닝됩니다. 따라서 int와 같은 사이즈가 나오는 것이 맞습니다.

홍민희 (VLAAH, LangDev)

freestyle의 이미지

요기
----------------------
Go to the U-City

----------------------------------------------------------------------------------------
Don't Feed the Trolls!
----------------------------------------------------------------------------------------