C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[5410] Re:[질문]sizeof의 잘못된 계산 -> data alignment boundary 때문입니다.
박지훈.임프 [cbuilder] 3342 읽음    2001-02-13 17:45
한꼬맹이 님이 쓰신 글 :
: 안녕하십니까?
:
: 한꼬맹이 입니다.
:
: 요즘 나름대로 혼자서 작업하는게 있었어 한동안 이사이트에 들어오지 못했습니다.
:
: 이제 다시 자주 들어와야지...
:
: 우연히 버그잡다가 알게 되었는데...
:
: struct Test
: {
:   int i;
:   char c;
: }aa;
:
:   sizeof(aa)=> 이값을 구해보면 당연히 5가 나와야 되는데...
:
:   제 컴에서 결과는 8이 나옵니다.
:
: 그리고 다른경우...
:
: struct Test
: {
:   double i;
:   char c;
: }aa;
:
:   sizeof(aa)=> 이값을 구해보면 당연히 9가 나와야 되는데...
:
:   제 컴에서 결과는 16이 나옵니다.
:
: 위의 두가지 경우를 종합해 볼때 구조체 멥버중 제일 큰 변수형의 크기로
:
: 모든변수형의 크기로 동일시 생각해서 값을 산출하는 것 같군요...
:
: 그래서 다른 컴파일러 Visual C++, delphi에서도 똑같이 해봤는데..
:
: 결과는 위와 똑같았습니다. 그래서 제가 내린 최종결론은 운영체제의 오류라고
:
: 생각하고 패치까지 해봤는데.. 결과값이 아무 변화가 없더라구요..
:
: 제가 쓰는 운영체제는 Windows 2000 서버인데...

: 알고싶은것은  저와 똑같은 환경을 가지신 다른분들이 위의 에제를
:
: 테스트 해보시고 결과가 어떻게 나오는지 궁금하구요.. 그리고 만약 sizeof()의
:
: 값이 제대로 나오게 하려면 어케해야 할까요?..
:
:


임펠리테리입니다.

잘못된 계산이 아닙니다.
대부분의 C/C++ 컴파일러에는 데이터 얼라인먼트 바운더리(data alignment boundary)라는 설정사항이 있어서, 이것을 어떻게 설정하느냐에 따라 똑같은 구조체의 실제 크기가 영향을 받습니다. 예를 들어, 빌더의 프로젝트 옵션에서 Advanced Compiler 탭에 보면 Quad Word, 즉 8바이트로 설정되어 있습니다. 이렇게 설정된 상태에서는 구조체의 크기는 무조건 8의 배수가 됩니다. 다시 말해, 정확한 값을 얻기를 원하면 이 옵션을 Byte로 설정하면 되는 겁니다.

이런 얼라인먼트 바운더리라는 개념이 있는 이유를 설명드리죠. 우리가 CPU나 OS를 16비트, 32비트 혹은 64비트로 분류하는 기준이 있는 것은 모든 데이터 처리를 그 비트수만큼 단위로 처리하기 때문입니다. 32비트 CPU에서는 데이터를 32비트, 즉 8바이트로 처리하는 것이 가장 효율이 높습니다. 그래서 32비트 환경에서는 얼라인먼트 바운더리를 빌더의 디폴트 설정처럼 32비트로 설정하는 것이 좋습니다. 그런데 간혹 이 값을 프로그래머가 임의로 설정해야 할 필요가 있으므로, 이것을 컴파일러 설정사항으로 포함시킨 것입니다.

터보씨를 공부할 때 저도 똑같이 혼란스러워했지요. 터보씨조차도 이런 세부적인 설정을 할 수 있다는 건 정말 놀랍지 않습니까? ^^
그럼 참고하시길...

+ -

관련 글 리스트
5404 [질문]sizeof의 잘못된 계산 한꼬맹이 2555 2001/02/13
5410     Re:[질문]sizeof의 잘못된 계산 -> data alignment boundary 때문입니다. 박지훈.임프 3342 2001/02/13
5409     Re:[질문]sizeof의 잘못된 계산 제라툴 2806 2001/02/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.