구조체의 크기 구하기
c언어에서 구조체를 정렬할때 맴버 중에서 가장 큰 자료형의 크기의 배수로 정렬함.
1byte char c
3byte padding - 남는 공간
4byte int i
구조체에서 맴버의 위치(offset)을 구하는 함수.
offsetof(struct 구조체, 맴버)
offsetof(구조체별칭, 맴버)
구조체 정렬 크기 조절
Visual Studio, GCC 4.0 이상
#pragma pack(push, 정렬크기)
#pragma pack(pop)
GCC 4.0 미만
__attribute__((aligned(정렬크기), packed))
출처 : c언어 코딩도장
c언어에서 구조체를 정렬할때 맴버 중에서 가장 큰 자료형의 크기의 배수로 정렬함.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
struct Head{
char c; // 1바이트
int i; // 4바이트
};
// ---------------------------
struct Head header;
printf("%d\n", sizeof(header)); // 8: 구조체 전체 크기는 8바이트
printf("%d\n", sizeof(struct PacketHeader)); // 8: 구조체 이름으로 크기 구하기
// 결과
// 8
// 8
| cs |
1byte char c
3byte padding - 남는 공간
4byte int i
구조체에서 맴버의 위치(offset)을 구하는 함수.
offsetof(struct 구조체, 맴버)
offsetof(구조체별칭, 맴버)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#include <stdio.h>
#include <stddef.h> // offsetof 매크로가 정의된 헤더 파일
struct Head{
char c; // 1바이트
int i; // 4바이트
};
int main()
{
printf("%d\n", offsetof(struct Head, c)); // 0
printf("%d\n", offsetof(struct Head, i)); // 4
return 0;
}
| cs |
구조체 정렬 크기 조절
Visual Studio, GCC 4.0 이상
#pragma pack(push, 정렬크기)
#pragma pack(pop)
GCC 4.0 미만
__attribute__((aligned(정렬크기), packed))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#pragma pack(push, 1) // 1바이트 크기로 정렬
struct Head{
char c; // 1바이트
int i; // 4바이트
};
#pragma pack(pop) // 정렬 설정을 이전 상태(기본값)로 되돌림
// ---------------------------
struct Head header;
printf("%d\n", sizeof(header)); // 5: 1바이트 단위로 정렬함.
// 결과
// 5
| cs |
출처 : c언어 코딩도장
댓글
댓글 쓰기