320x100
이전 글에서 구조체의 크기가 멤버 변수보다 크게 잡히는 현상을 확인했다.
2023.06.04 - [프로그래밍/C,C++,C#] - [C,C++,C#] 구조체 메모리 크기 계산
[C,C++,C#] 구조체 메모리 크기 계산
C언어를 하면 구조체를 초반부에 배우는데, 좀 더 깊게 들어가 본다. 아래 코드의 결과는? #include struct Temp{ double a; int b; char c; }; int main() { struct Temp temp; printf("struct size = %ld\n", sizeof(temp)); return 0; }
park-duck.tistory.com
해결방법은 크기가 작은 멤버변수 순서로 선언하는 것이었는데,
그렇다고 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 |
댓글