320x100
이전 글에서 구조체의 크기가 멤버 변수보다 크게 잡히는 현상을 확인했다.
2023.06.04 - [프로그래밍/C,C++,C#] - [C,C++,C#] 구조체 메모리 크기 계산
해결방법은 크기가 작은 멤버변수 순서로 선언하는 것이었는데,
그렇다고 char, double 순서로 놓는다고 해서 16byte가 7byte로 변하진 않는다.
padding을 최소화하는 하나의 솔루션인 것이지 아예 없애지는 않는 것이다.
다시 한 번,
아래 소스코드의 결과는 16byte이다.
#include <stdio.h>
struct Temp{
char a;
double b;
};
int main()
{
struct Temp temp;
printf("struct size = %ld\n", sizeof(temp));
return 0;
}
padding을 최소화하는 방법은 __attribute__((__packed__))를 사용하는 방법이다.
#include <stdio.h>
struct __attribute__((__packed__)) Temp{
char a;
double b;
};
int main()
{
struct Temp temp;
printf("struct size = %ld\n", sizeof(temp));
return 0;
}
#pragma를 사용하는 방법도 있으나, 모든 구조체가 다 적용되니 유의한다.
#include <stdio.h>
#pragma pack(1)
struct Temp{
char a;
double b;
};
int main()
{
struct Temp temp;
printf("struct size = %ld\n", sizeof(temp));
return 0;
}
반응형
'프로그래밍 > C,C++,C#' 카테고리의 다른 글
[C, C++] 배열과 포인터 차이 (feat. array to pointer decay) (0) | 2024.07.23 |
---|---|
[C,C++,C#] 구조체 메모리 크기 계산 (0) | 2023.06.04 |
[C,C++,C#] 전처리 ##연산자 (0) | 2023.06.04 |
[C] 공용체(union) 변수 사용 (feat. 콜론 연산자) (0) | 2023.04.07 |
[C/C++] 간편하게 LOG 남기기(feat. 가변인자) (0) | 2023.03.29 |
댓글