본문 바로가기
개념

[개념] 구조체 패딩 (Struct Padding)

by 부먹짱 2022. 4. 15.
반응형

구조체 패딩은 성능 향상을 위해 CPU가 접근하기 쉬운 위치 메모리에 구조체 필드를 배치하는 것이다.

CPU는 메모리를 읽어올 때 한 번에 [32bit OS*]는 4byte, [64bit OS]는 8byte를 읽어온다.

 

아래와 같은 구조체가 선언되어있다.

 

struct box {
    char c;
    long long ll;
};

 

이때 long long 타입의 ll 멤버 변수를 읽고자 하면

32bit OS는 한 번에 4byte씩 메모리를 읽기 때문에 메모리에 3번 접근이 필요하고

64bit OS는 한번에 8byte씩 메모리를 읽기 때문에 메모리에 2번 접근이 필요하다.

 

 

하지만 아래와 같이 구조체에 패딩 값을 넣어준다면

 

 

패딩 비트의 크기만큼 메모리를 낭비하게 되지만

CPU가 ll을 읽어올 때 메모리에 접근하는 수가 줄어들어 성능 저하를 막을 수 있다.

(CPU 연산 횟수 감소)

 

반응형

 

하지만 네트워크를 통해 구조체를 전송하게 된다면 패딩 비트가 문제가 될 수 있다.

구조체가 메모리에 정의되는 형태는 OS와 컴파일러에 따라 다르다.

컴파일러에 따라 패딩 비트의 삽입 위치가 다르고, OS의 bit 수에 따라 삽입하는 패딩 비트의 수가 다르다.

 

따라서 서로 다른 메모리 정의를 가진 시스템 간 구조체를 주고받는다면

패딩 비트로 인해 구조체의 값이 달라질 수 있다.

 

이를 해결하기 위한 두 가지 방법이 있는데,

1. #pragma pack(push, n)을 이용해 컴파일러가 패딩 비트를 사용하지 않도록 한다. 

2. 개발자가 직접 패딩 비트를 삽입한다.

 

 

 

 

함께 보면 좋은 글 ▽

빅 엔디안 & 리틀 엔디안 (Big-Endian & Little-Endian)

 

[개념] 빅 엔디안 & 리틀 엔디안 (Big-Endian & Little-Endian)

비트(bit)란 컴퓨터가 데이터를 처리하기 위해 사용하는 데이터의 최소 단위이다. 바이트(byte)는 한 문자를 표한할 수 있는 최소 단위로 8비트로 구성되어있다. (1Byte = 1Bit) 컴퓨터는 데이터를 바

bumukisbest.tistory.com

 

*OS : 운영체제

반응형

댓글