Byte Padding
CPU는 4바이트씩 읽는다.
* CPU는 4바이트 단위로 읽어낸다.
4바이트씩 읽으면 생기는 비효율
* 메모리에 char -> int 순서로 공간을 할당했다.
CHAR | INT | INT | INT | INT | ??? | ??? | ??? |
* char를 읽어 들일 때는 상관없지만 int를 읽으려면 4바이트씩 2번 읽어 들어야 한다.
* 이처럼 빈틈없이 쌓이는 구조는 메모리는 아끼지만 CPU 성능은 떨어진다.
Byte Padding은 메모리를 비효율적으로 사용하게 만들 수 있다.
* CPU 성능의 비효율을 없애기 위해 Padding(빈 공간)을 넣어준다.
CHAR | ??? | ??? | ??? | INT | INT | INT | INT |
* 3바이트 공간을 버렸지만 INT를 읽을 때 1번 만에 읽을 수 있다.
* 즉 char, int 구조체를 만든다면 용량은 8바이트이다.
Byte Padding을 생각하고 구조체를 선언하자
* char 4개를 연속해 선언한다면 빈 공간이 생기지 않는다.
typedef struct {
char a;
char b;
char c;
char d;
int ff;
} struct_t;
Char A | Char B | Char C | Char D | INT ff | INT ff | INT ff | INT ff |
* 빈 공간을 없앨 수 있으면 없애는 거고... 못하면 그냥 사용하세요.
귀여운 그림은 낡은 창고님이 그리셨습니다.
반응형
'C' 카테고리의 다른 글
공용체 Union (0) | 2020.12.23 |
---|---|
Bit Flags (0) | 2020.12.23 |
구조체 배열과 포인터 (0) | 2020.12.22 |
구조체 (0) | 2020.12.22 |
rewind 함수, fseek 함수, ftell 함수 (0) | 2020.12.21 |