요새 C언어로 코드를 짜다 보니까 자잘자잘한 컴파일러 옵션이나 문법을 알게 된다.

전에는 몰랐던 구조체의 메모리 할당에 대해서 잘 알게 되었다.

컴파일러가 구조체의 메모리를 할당할때 가장 큰 타입의 메모리 곱하기 변수 개수를 한다는 것이다.

struct AAA
{
     int a;
     char b[2];
     int c;
};

이렇게 하면 할당되는 메모리는 10byte일 것같지만 실제로 12byte가 된다. 속도를 좀더 올리려는 목적에서 그런다고 한다. 그리고 남는 2byte는 b의 뒤에 빈공간이 있다.

하지만 특별한 상황에는 실제 메모리를 정확하게 잡아야 할때가 있기 때문에
#pragma pack( ... )으로 해결 할 수 있다.

#pragma pack( push )
#pragma pack( 1 )
// 구조체 선언..
#pragma pack( pop )
이런식으로 하면 된다..ㅋ

신고
by danguria 2008.08.01 15:02

티스토리 툴바