▶구조체 :
C언어에서는 구조체와 배열을 중첩적으로 정의하므로 복잡한 구조의 자료를 효율적으로 구성할수 있다.
#include < stdio.h >
#pragma pack(1) // 1byte 기반으로 byte 를 Packing 한다.
struct SMART // 구조체이름을 SMART 라고 하고 { // 1 byte를 기반으로 byte를 Packing 한다. int A; // 4 byte char B; // 8 byte int C; // 12 byte short D; // 16 byte char E; // 16 byte int F; // 20 byte char G; // 24 byte short H; // 24 byte char I; // 28 byte };
#pragma pack(4) // 4byte 기반으로 byte 를 Packing 한다. struct SMART1 // 구조체이름을 SMART1 라고 하고 { // 4 byte를 기반으로 byte를 Packing 한다. int A; // 4 byte char B; // 5 byte int C; // 9 byte short D; // 11 byte char E; // 12 byte int F; // 16 byte char G; // 17 byte short H; // 19 byte char I; // 20 byte };
int main() { printf("%d\n", sizeof(struct SMART)); printf("%d\n", sizeof(struct SMART1)); return 0; } | |
※ 컴파일러에 따라 #pragma pack(push, 1) // push 를 바로 저장하고 1byte 만큼 최적화하는것 #pragma pack(pop) 을 사용할때도 있다. push 와 pop 같은 경우는 컴파일러에 따라 잘 골라써야한다. |
|
메모리 관리 측면에서 전처리 #pragma 개념은 아주 중요하다 ! (하지만 속도는 줄어든다 ㅠ) |
|
▶ 결과는 놀랍게도 20 byte 와 28 byte 가 나온다!
#include < stdio.h >
struct _SMART { int A;
};
typedef struct _SMART SMART; // 우리가 정의해준 자료형의 이름을 // SMART 라고 하자.
// 위에 구조를 합쳐서 적어준 형태가 아래 형태이다. // 태그도 생략이 가능하긴하다! 아래에서 _SMART1 을 태그라고함.
typedef struct _SMART1 // 우리가 정의해준 자료형의 이름을 { // SMART1 이라고 하자. int A; }SMART1;
int main() { SMART test; SMART1 test1; test.A = 100; test1.A = 200;
printf("%d\n", test.A); printf("%d\n", test1.A);
return 0; }
| |
▶ 줄여도 잘된다 !
----------
9_2.c
test3.c
test4.c
--------