안녕하세요 스페로 입니다.
오늘 좀 황당한 일을 경험 했습니다.
단말기 일을 주로 해오던 터라
(Arm Developer Suite 1.2 embedded C컴파일러 ) ARM7, ARM9 CPU
에선 enum 타입이 1로 잡히거나 2로 잡히거나 합니다.
그래서 제 홈페이지에 아래와 같은 글도 2006년도에 남기기도 했습니다.
http://sparrow.borlandforum.com/board/boardview.asp?table_name=csharpbuilder&sel=search&findit=enum&srch=title&gotopage=1&block=0&board_idx=23&path=N&vir_numm=1&vir_numm2=1
오늘은 단말기 구조체 를 PC로 포팅해서 테스트 할일이 있어서. 보고 있는데
구조체 속에 필드로 enum 타입이 7개나 있었습니다.
sizeof (구조체) 를 하면 생각 했던 크기 보다 크고
단말 소스는 완전히 컴파일 되는 놈이 아니기 때문에 확인도 어려운 상태..
패닉 상태에 빠지고 왜 크기가 다를까 한참을 고민 하다가
PC에서 (RAD Studio 2007) 에서 테스트 해보니 enum 타입을 4바이트로. 처리 합니다.
아까 위에 링크에 있는 글에 테스트 소스를 돌려도 4바이트.
이런 홈페이지에 저글을 올리기 전에 분명 테스트를 했을 터인데..
바로 CBuilder 6에서 돌려 보았습니다. 결과는 1바이트. 그럼 그렇지..
VC++ 6 콘솔 C++ 버젼에서 돌려 보면 4바이트
결론
임베디드 C와 CBuilder6 과 같이 동작
VC++6 , RAD 2007 C++Builder 무조건 4바이트로...
결국 PC로 포팅한 구조체에서 enum타입을 필드로 쓰는 부분을 모두 unsigned char로 수정하니 생각 했던 구조체 사이즈가 되었습니다.
참 요상한 하루 입니다.
|
아~~ 정말 그렇네요
구조체속에 enum 형을 필드로 사용해 본적이 한번도 없어서 생각도 못해봤네요
C++Builder6 에서는 왜 enum을 1~4Byte가변으로 컴파일될까요?
리소스를 효율적으로 쓰려구?
속도에는 문제가 없나요?
RAD Studio 2007 에서 4Byte로 갔다면 , 그렇게 간 이유가 있을것 같은데....
궁금...