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

조회수 1714회

보니까 멤버변수 크기 다 합한 것보다 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  |
    +-------+-------+-------+-------+
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)