본문 바로가기

Programming

[C Programming] Struct Hack


먼저 다음의 구조체에 대해서 어떻게 생각하는가요?...


struct SHack

{

int A;

int B;

char array[0];

} ;


컴파일시 char array[0] 와 같은 배열의 실제 크기는 얼마로 할당될것인가? 결론부터 말하자면..

"Struct Hack"은 구조체에서 가변길이의 멤버를 사용하기 위한 테크닉이다.


실제 사용시 아래와 같이 먼저 메모리를 할당한 후 사용을 할 수 있다.

struct SHack *e = malloc(sizeof(*e) + sizeof(char) + ARRAY_SIZE);


이는 다음과 같은 구조체와 같다.

 struct SHack

{

int A;

int B;

char array[ARRAY_SIZE];

};


gcc 는 이와 같은 메모리를  A, B 에 이어서  array를 연속적으로 할당하게 된다.


그럼 이의 장점은 무엇일까?. 간단히  char *array;로 선언한 다음  runtime에서 해당 부분만 malloc해서 사용하면 되지 않을까???


장점. 분명히 있다.

1. 이전에 언급했듯이 메모리가 연속적으로 되어 있다. 이는 해당 구조체를 포함한 데이터 전체  Copy시

다음과 같이 한번에 할 수 있다.

memcpy(dst, e, sizeof(*e) + ARRAY_SIZE);


2. 프로토콜을 처리하는 부분에서 적절히 사용할 수 가 있다. 조금만 생각해 보면 답 나올듯 하다. 실제 그렇게 많이 사용하고 있다.



참고로 C99에서는 "flexible array members" 로 명칭되어 있다. 바로 "struct hack" 불리어지던 테크닉을 말이다.

'Programming' 카테고리의 다른 글

현재 네트워크에서 DHCP 서버가 동작되고 있는지 확인?  (0) 2014.08.18
gsoap (2)  (1) 2014.03.12
gsoap (1)  (0) 2014.03.11
stub & skeleton 이해하기  (0) 2013.10.28
Software Versioning (소프트웨어 버전규칙)  (0) 2013.08.07