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


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

  • 2016년 01월 06일에 작성됨

조회수 158


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  |
+-------+-------+-------+-------+
  • 2016년 01월 06일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close