[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

+ Recent posts