구조체 패딩이란?
CPU에서는 데이터를 메모리에서 읽고 쓸 때 정렬되어 있는 경우에 더 빠르게 접근할 수 있다. 예를 들어 32비트 컴퓨터의 경우 4바이트 단위로 저장되어 있어야 더 효율적으로 접근이 가능하다. 만약 4바이트 단위가 아니라 6바이트, 7바이트 등의 형태로 정렬되어 있는 경우 추가적인 연산이 발생하면서 성능이 저하될 수 있다.
예시를 한번 들어보자.
struct Pad
{
char a;
long long b;
};
이 구조체의 멤버 b의 자료형은 long long이기 때문에 8바이트의 크기를 갖는다. 이 변수를 읽어들이는 경우 32비트 OS의 경우 3번의 접근이 필요하고, 64비트 OS의 경우에도 2번의 접근을 필요로 하게 된다.
하지만 패딩을 통해 보정을 해준다면?
32비트의 경우 2번의 접근을 통해 읽어들일 수 있고, 64비트의 경우 단 한번에 접근이 가능해진다.
구조체를 네트워크를 통해 전송하게 되는 경우
이 경우에는 구조체 패딩이 문제가 될 수 있다.
구조체가 메모리에 정의되는 형태는 OS와 컴파일러에 따라 다르다. 따라서 서로 다른 메모리 정의를 가진 시스템 간 구조체를 주고받는 경우 문제가 될 수 있다.
해결 법은 간단하다.
#pragma pack(push, n)
n바이트 단위로 저장하겠다고 지정하는 방법을 사용한다.
'Programming > 기타' 카테고리의 다른 글
워치독 타이머(Watchdog Timer) (0) | 2024.12.15 |
---|---|
소프트웨어의 정의와 특성 (1) | 2024.12.08 |
인터페이스와 추상클래스 (0) | 2024.12.08 |
TDD(Test- Driven Development)에 대하여 (1) | 2024.12.06 |
동적 연결 라이브러리 (Dynamic Linked Library) (0) | 2024.12.03 |