반응형
#pragma pack(push,1) 및 #pragma pack(pop)은 C/C++에서 구조체(struct) 또는 클래스의 메모리 정렬(padding)을 제어하는 데 사용됩니다.
의미 및 동작
1. #pragma pack(push,1)
- 현재 구조체 정렬 규칙을 저장한 후, 새로운 정렬 규칙을 적용합니다.
- 1을 지정하면 구조체 내의 멤버들이 1바이트 단위로 정렬됩니다.
- 즉, 패딩(padding)이 제거되며, 데이터가 연속적으로 배치됩니다.
2. #pragma pack(pop)
- 이전에 저장된 정렬 규칙을 복원합니다.
- 즉, push 전에 설정된 정렬 방식으로 되돌립니다.
예제 코드
#include <iostream>
#pragma pack(push, 1) // 1바이트 단위 정렬
struct PackedStruct {
char a; // 1 byte
int b; // 4 bytes
short c; // 2 bytes
};
#pragma pack(pop) // 원래 정렬 방식으로 복원
struct NormalStruct {
char a; // 1 byte
int b; // 4 bytes (패딩 추가됨)
short c; // 2 bytes
};
int main() {
std::cout << "Size of PackedStruct: " << sizeof(PackedStruct) << " bytes\n";
std::cout << "Size of NormalStruct: " << sizeof(NormalStruct) << " bytes\n";
return 0;
}
실행 결과 (예상)
Size of PackedStruct: 7 bytes
Size of NormalStruct: 8 or 12 bytes (컴파일러 및 플랫폼에 따라 다름)
사용 목적
- 네트워크 프로토콜, 파일 포맷 등에서 정확한 바이트 정렬이 필요할 때.
- 메모리 절약이 필요한 경우 (다만, CPU 성능 저하가 있을 수 있음).
- 하드웨어 인터페이스에서 정해진 바이트 정렬을 맞추어야 할 때.
주의: 패킹을 적용하면 메모리는 절약되지만, CPU의 접근 속도가 느려질 수 있으므로 적절한 상황에서만 사용해야 합니다.
반응형
'정보&팁 > 전기 & 전자' 카테고리의 다른 글
확률 상태 추정 : 베이즈 필터 (2) | 2025.03.19 |
---|---|
Motor Board Firmware 개발에 필요한 내용 - 1 (1) | 2025.03.18 |
CAN통신 - Boardcast 형식 (9) | 2025.03.11 |
내가 보기 위해 만든 로봇의 모터 운용을 위한 CAN 통신 정리 (6) | 2025.03.10 |
CAN 통신이란? 자동차와 산업 자동화에서 필수적인 기술 (6) | 2025.02.20 |