변수가 메모리에서 차지하는 크기를 확인할 때 사용하는 것이 sizeof()입니다.

혹시 구조체로 선언한 변수의 크기를 확인할 때 sizeof()에서 어떤 이름을 사용하시나요?

구조체 이름을 사용하시나요? 아니면 변수 이름을 사용하시나요?


예를 들어 아래의, dt_now의 크기를 확인할 때 date_t로 확인하시나요? 아니면 dt_now를 확인하시나요?


typedef struct{

    int             year;                   ///< 년

    int             month;                  ///< 월

    int             day;                    ///< 일

} date_t;


date_t dt_now;


개인적인 생각입니다만, 변수의 크기를 확인할 때는 sizeof()에 변수 이름을 사용하는 것이 직관적입니다.


    dt_now_size = sizeof( dt_now);


그러나 경험으로 바탕으로 저는 변수 이름 대신에 구조체 이름을 사용합니다.


    dt_now_size = sizeof( date_t);


이유는 C 언어에 익숙하지 않은 후임자나 거래처 분을 위한 습관입니다.

변수 이름을 사용해서 보내면 무조건 변수 이름을 사용하는 분이 있습니다. 그리고 구조체를 포인터로 선언하면
버그가 발생하지요.

   date_t    *p_date;

   dt_now_size = sizeof( p_date)


mallocI()를 사용하여 p_date에 메모리를 할당해도 p_date의 크기는 포인터 변수 크기,

즉 32비트 시스템에는 32 비트 크기로, 64비트 시스템에는 64비트의 크기로 반환할 뿐

date_t 구조체의 크기를 반환하지 않지요.


그래서 구조체의 크기를 확인할 때는 변수 이름 대신에 구조체 이름을 이용합니다.