[code]
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <stddef.h> // offsetof 매크로가 정의된 헤더 파일
// C 언어에서는 구조체를 정렬할 때 멤버 중에서 가장 큰 자료형 크기의 배수로 정렬합니다.
typedef struct _DATA_MESSAGE1
{
// 구조체 전체 크기: 8 byte, 패딩: 메모리 남은 공간
// | 0:a | 1:패딩 | 2:패딩 | 3:패딩 | (byte 단위)
char a; // 4 byte 에서 1 byte 메모리 사용
// | 0:a | 1:b | 2:패딩 | 3:패딩 | (byte 단위)
char b; // 기존 4 byte 에서 1 byte 메모리 사용
// | 0:a | 1:b | 2:패딩 | 3:패딩 | 4:c | 5:패딩 | 6:패딩 | 7:패딩 | (byte 단위)
int c; // 4 byte 에서 1 byte 메모리 사용
}DATA_MESSAGE1, * PDATA_MESSAGE1;
int main(void)
{
DATA_MESSAGE1 dMeg;
printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.a));
printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.b));
printf("int 메모리 공간의 크기: %d \n", sizeof(dMeg.c));
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)); // 4
return 0;
}
[print]
char 메모리 공간의 크기: 1
char 메모리 공간의 크기: 1
int 메모리 공간의 크기: 4
구조체 전체 크기는: 8
구조체 멤버의 a 위치 offset: 0
구조체 멤버의 b 위치 offset: 1
구조체 멤버의 c 위치 offset: 4
'Windows App' 카테고리의 다른 글
C언어 구조체 크기 구하기 4 (0) | 2024.05.23 |
---|---|
C언어 구조체 크기 구하기 3 (0) | 2024.05.23 |
C언어 구조체 크기 구하기 1 (0) | 2024.05.23 |
앱 C++ 외부 라이브러리 사용법 (0) | 2024.01.31 |
C++ 프로젝트 원격 디버그 (0) | 2022.08.09 |