왜 struct의 크기는 멤버변수의 크기를 다 더한 값이랑 다른가요?

보니까 멤버변수 크기 다 합한 것보다 struct크기가 더 크던데 왜 이런거요?

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    C FAQ에 있는걸 번역해드릴게요

    보통의 32비트(8바이트) 프로세서는 2, 4바이트 같은 크기로는 접근할 수 없습니다.

    다음과 같은 struct가 주어질 때

    struct {
        char a[3];
        short int b;
        long int c;
        char d[3];
    };
    

    메모리가 아래와 같이 잡힌다고 생각하시겠지만(12바이트):

    +-------+-------+-------+-------+
    |           a           |   b   |
    +-------+-------+-------+-------+
    |   b   |           c           |
    +-------+-------+-------+-------+
    |   c   |           d           |
    +-------+-------+-------+-------+
    

    프로세서는 다음과 같이 접근하는 게 더 편합니다(12바이트):

    +-------+-------+-------+
    |           a           |
    +-------+-------+-------+
    |       b       |
    +-------+-------+-------+-------+
    |               c               |
    +-------+-------+-------+-------+
    |           d           |
    +-------+-------+-------+
    

    이것도 프로세서한테 별로 좋은 방법은 아닙니다. a,b,d가 8바이트로 꽉 차지 않았으니까요 그래서 대부분 컴파일러는 남는 부분을 채워줍니다. 이걸 pad라고 하지요. pad한 결과는 다음과 같이 나타납니다.

    +-------+-------+-------+-------+
    |           a           | pad1  |
    +-------+-------+-------+-------+
    |       b       |     pad2      |
    +-------+-------+-------+-------+
    |               c               |
    +-------+-------+-------+-------+
    |           d           | pad3  |
    +-------+-------+-------+-------+
    

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.