hueam아카이브
구조체 바이트 패딩 본문
구조체 바이트 패딩이란?
컴파일러는 성능향상을 위해 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번 접근한다는 것은 낭비이다.
하지만 패딩이 들어간다면?
각 필드 값을 단 한번의 메모리를 읽는 과정으로 접근 할 수 있게 된다.