Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

hueam아카이브

구조체 바이트 패딩 본문

오래남는 공부

구조체 바이트 패딩

hueam 2023. 10. 29. 00:53

구조체 바이트 패딩이란?

컴파일러는 성능향상을 위해 CPU가 접근하기 쉬운 위치에 필드를 배치한다. 그러다보니 중간에 빈 공간이 들어가게 되는데 이를 바이트 패딩이라고 한다.

struct test
{
    char c;//1byte
    int i;//4byte
}

이러한 구조체가 있다면 크기가 어느 정도일까? 1+4 해서 5byte?
정답은 8byte다.

왜 이런 일이 일어날까?

32bit CPU를 사용한다고 가정하고 설명하자면, CPU가 메모리에서 값을 읽어올 때 한번에 4바이트를 읽어올 수 있다.
패딩 값을 고려하지 않고 c 를 읽으면 첫 주소로부터 4byte읽고 그중 맨 앞 1byte만 사용하면 된다. 여기에는 큰 문제가 없다.
허나 i 값을 읽어오려 하면 첫 주소로부터 4byte읽고 그중 맨 앞은 c 의 값 뒤 3byte를 확인 한 후 다음 byte를 불러와 나머지 1byte를 읽는다.

i 라는 필드의 값을 읽는데 메모리에 2번 접근한다는 것은 낭비이다.

하지만 패딩이 들어간다면?

각 필드 값을 단 한번의 메모리를 읽는 과정으로 접근 할 수 있게 된다.