이미안녕 2019. 10. 24. 11:20
#include <stdio.h>
#include <unistd.h>
#pragma pack(push, 1) // 1 바이트 크기로 정렬
struct str_pack {
	char flags;
	int seq;
};
#pragma pack(pop) // 정렬 설정을 이저너ㅓ 상태 (기본값) 로 되돌림

union packet {
	int num;
	char empty;
};

union packet_empty {
	int num;
	char empty[0];
};

struct str_first {
	char a;
	int num_a;
	char b;
};

union uni_first {
	int num_a;
	int num_b;
};

union uni_second {
	int a;
	char b;
	double d;
	int arr[3];
};

struct Person1 {
	char name[20];
	double age;
	char sex;
};

struct Person2 {
	char name[20];
	char sex;
	double age;
};

int main()
{
	printf("PAGE_SIZE = %d\n", getpagesize());

	int i;
	int *ip;
	char ch;
	char *chp;
	char arrays[10];
	char empty[0];
	union packet pk;
	union packet_empty pk_empty;
	int int_array4[4];

	struct str_first v_str_first;
	union uni_first v_uni_first;

	pk.num = 4;
	pk.empty = 'c';
	//pk_empty.empty = "c";


	printf("sizeof(int i) = %ld\n", sizeof(i));
	printf("sizeof(int *i) = %ld\n", sizeof(ip));
	printf("sizeof(char ch) = %ld\n", sizeof(ch));
	printf("sizeof(char *chp) = %ld\n", sizeof(chp));
	printf("sizeof(char arrays[10]) = %ld\n", sizeof(arrays[10]));
	printf("sizeof(char empty[0]) = %ld\n", sizeof(empty[0]));
	printf("sizeof(union packet) = %ld\n", sizeof(union packet));
	printf("sizeof(union packet) = %ld\n", sizeof(union packet));

	printf("sizeof(int_array4) = %ld\n", sizeof(int_array4));
	printf("sizeof(int_array4[0]) = %ld\n", sizeof(int_array4[0]));

	printf("\n============ Struct Size =============\n\n");

	printf("sizeof(struct str_first) = %ld\n", sizeof(struct str_first));
	printf("sizeof(struct str_first v_str_first) = %ld\n", sizeof(v_str_first));
	printf("sizeof(union uni_first) = %ld\n", sizeof(union uni_first));
	printf("sizeof(union uni_first v_uni_first) = %ld\n", sizeof(v_uni_first));
	printf("sizeof(union uni_second) = %ld\n", sizeof(union uni_second));
	printf("sizeof(struct Person1) = %ld\n", sizeof(struct Person1));
	printf("sizeof(struct Person2) = %ld\n", sizeof(struct Person2));

	v_uni_first.num_a = 4;

	printf("%d\n", v_uni_first.num_a);
	printf("%d\n", v_uni_first.num_b);

	return 0;
}