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
[15160] 버그 아닙니다. ^^
김상구.패패루 [peperu] 844 읽음    2002-01-31 03:01
대부분의 C++ 컴파일러는 비슷한 현상을 보여줍니다.
Visual C++도 예외는 아니구요.

쉽게 생각해서 32bit컴퓨터에서는 4byte씩 메모리 할당이 기본적으로 이루어진다고 보시면 됩니다.
아무리 1byte만 써도 기본 4byte가 잡히죠. 메모리 측면에서는 낭비지만 연산속도에서는 차이가 없습니다. 아차피 한번에 4byte씩 CPU가 처리하기 때문이죠.

원하는 바이트 만큼씩만 메모리를 점유하게 하려면

#pragma pack(1)
struct ..... {

};
#pragma pack() //확인해 보세요.. pack(0)였던가.. 쩝...

이렇게 하시면 됩니다.
평상시엔 이런건 큰 문제가 안되지만 패킷방식의 소켓 통신에선 문제가 심각합니다.
반드시 pack을 써야 하죠. 안그러면, 패킷사이즈를 무턱대고 sizeof로 측정해서 날렸다가는 정말 난리납니다.

패패루였슴다.

김규겸 님이 쓰신 글 :
: 안녕하세요...
: 김규겸입니다...
:
: 우연히 구조체를 사용하다 보니 이상한 점이 있어 여쭈어 봅니다...
: cbuilder에서 개별 변수의 사이즈와 구조체를 사용시 전체 변수 합의 사이즈가 다릅니다...
: 이 문제는 short int형 사용시만 나타나는 문제인것 같습니다...
:
: 예를 들어
:
: short int 형의 크기는 sizeof(short int) = 2byte 입니다...
: int 형의 크기는 sizeof(int) = 4byte 입니다...
:
: struct test {
:    short int a;
:    int b;
: };
:
: 그러면 sizeof(test) = ?    
: 2 + 4 bype 합인 6byte여야 할텐데 8byte 입니다...
: 구조체 사용시 short int형이 4byte로 잡히는것 같습니다...
:
: 이건 버그 맞겠죠...
:
: 누가 볼랜드에 얘기좀 해주세요...
: 버젼 6에서 해결해 달라구요...
:
: 요것 알아 내느라 며칠 고민했습니다....
:
: 김규겸 드림.
:

+ -

관련 글 리스트
15152 [질문] cbuilder 버그 일까요 ? 김규겸 817 2002/01/30
29857     Re:[질문] cbuilder 버그 일까요 ? 박진훈 865 2002/01/30
15160     버그 아닙니다. ^^ 김상구.패패루 844 2002/01/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.