성엽이
KKIMSSI
성엽이
전체 방문자
오늘
어제
  • 분류 전체보기 (454)
    • :) (2)
    • C프로그래밍이론 (9)
    • C++프로그래밍 (64)
      • STL (1)
    • C# (2)
    • Visual studio 10.0 (9)
    • AT91SAM7S256 (21)
    • 논리회로 (14)
    • AVR2560 (11)
    • TCPIP (16)
    • NetWork (4)
      • Ubuntu Linux (2)
    • Assembly (21)
    • UNIX 프로그래밍 (6)
    • RFID 분석 (1)
    • Win32 API (7)
    • Cortex-M3 (4)
    • Unity (91)
    • Flutter (9)
    • OwnProject (11)
      • It's mine (5)
      • 마인드스톰 실습 (1)
      • 보고서 자료 (2)
      • RPi B+ (2)
    • ETC (25)
      • 상식 (3)
    • MFC (40)
    • PostgeSQL (18)
    • 영상제어 (6)
      • VFW_영상처리 (1)
    • Python (0)
    • Java (30)
      • SpringBoot (2)
      • Javascript (1)
      • JSP (13)
      • Spring (8)
    • Oracle (4)
      • SQL (3)
    • HTML (6)
      • Thymeleaf (1)
      • CSS (1)
      • Bootstrap (3)
    • IDE (1)
      • VS Code (1)
    • Android (2)
    • Privacy Policy (0)
    • MYSQL (2)
      • MariaDB (2)
    • AWS (5)
    • 개인공부 (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록
  • 관리자
  • 글쓰기

공지사항

인기 글

태그

  • 문자열 나누기
  • ARM Reverse Engineering
  • MFC
  • Boot Code 분석
  • WINAPI

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
성엽이

KKIMSSI

2013.04.15_구조체_메모리관리
C++프로그래밍

2013.04.15_구조체_메모리관리

2013. 4. 15. 16:50

▶구조체 :

 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

--------

저작자표시 (새창열림)

'C++프로그래밍' 카테고리의 다른 글

2013.04.17_구조체 포인터변수사용  (0) 2013.04.17
2013.04.16_C언어_구조체  (0) 2013.04.16
2013.04.12_메인함수_임베디드약간  (0) 2013.04.12
2013.04.11_문자열을다루는배열,포인터배열  (0) 2013.04.11
2013.04.08_문자열  (0) 2013.04.08
    'C++프로그래밍' 카테고리의 다른 글
    • 2013.04.17_구조체 포인터변수사용
    • 2013.04.16_C언어_구조체
    • 2013.04.12_메인함수_임베디드약간
    • 2013.04.11_문자열을다루는배열,포인터배열
    성엽이
    성엽이

    티스토리툴바