|
대부분의 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에서 해결해 달라구요...
:
: 요것 알아 내느라 며칠 고민했습니다....
:
: 김규겸 드림.
:
|