[내용]
40 byte → 20byte 사용
[코드]
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <stddef.h> // offsetof 매크로가 정의된 헤더 파일
// C 언어에서는 구조체를 정렬할 때 멤버 중에서 가장 큰 자료형 크기의 배수로 정렬합니다.
#pragma pack(push, 1) // 1 byte 크기로 정렬
typedef struct _DATA_MESSAGE1
{
// 구조체 전체 크기: 20 byte, 패딩: 메모리 남은 공간
char a;
char b;
char c;
char d;
int e;
int f;
double g;
}DATA_MESSAGE1, * PDATA_MESSAGE1;
#pragma pack(pop) // 정렬 설정을 이전 상태(기본값)로 되돌림
int main(void)
{
DATA_MESSAGE1 dMeg;
printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.a));
printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.b));
printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.c));
printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.d));
printf("int 메모리 공간의 크기: %d \n", sizeof(dMeg.e));
printf("int 메모리 공간의 크기: %d \n", sizeof(dMeg.f));
printf("double 메모리 공간의 크기: %d \n", sizeof(dMeg.g));
printf("구조체 전체 크기는: %d \n", sizeof(dMeg));
// offsetof 구조체에서 해당 멤버의 상대 위치가 반환
printf("구조체 멤버의 a 위치 offset: %d\n", offsetof(DATA_MESSAGE1, a)); // 0
printf("구조체 멤버의 b 위치 offset: %d\n", offsetof(DATA_MESSAGE1, b)); // 1
printf("구조체 멤버의 c 위치 offset: %d\n", offsetof(DATA_MESSAGE1, c)); // 2
printf("구조체 멤버의 d 위치 offset: %d\n", offsetof(DATA_MESSAGE1, d)); // 3
printf("구조체 멤버의 e 위치 offset: %d\n", offsetof(DATA_MESSAGE1, e)); // 4
printf("구조체 멤버의 f 위치 offset: %d\n", offsetof(DATA_MESSAGE1, f)); // 8
printf("구조체 멤버의 g 위치 offset: %d\n", offsetof(DATA_MESSAGE1, g)); // 12
return 0;
}
[pirnt]
char 메모리 공간의 크기: 1
char 메모리 공간의 크기: 1
char 메모리 공간의 크기: 1
char 메모리 공간의 크기: 1
int 메모리 공간의 크기: 4
int 메모리 공간의 크기: 4
double 메모리 공간의 크기: 8
구조체 전체 크기는: 20
구조체 멤버의 a 위치 offset: 0
구조체 멤버의 b 위치 offset: 1
구조체 멤버의 c 위치 offset: 2
구조체 멤버의 d 위치 offset: 3
구조체 멤버의 e 위치 offset: 4
구조체 멤버의 f 위치 offset: 8
구조체 멤버의 g 위치 offset: 12
'Windows App' 카테고리의 다른 글
C언어 구조체 크기 구하기 5 (C언어 구조체 크기 구하기4 개선 버전) (0) | 2024.05.23 |
---|---|
C언어 구조체 크기 구하기 4 (0) | 2024.05.23 |
C언어 구조체 크기 구하기 3 (0) | 2024.05.23 |
C언어 구조체 크기 구하기 2 (0) | 2024.05.23 |
C언어 구조체 크기 구하기 1 (0) | 2024.05.23 |