먼저 다음의 구조체에 대해서 어떻게 생각하는가요?...
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 |