달력

52025  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

동적 할당을 하기 위해 다음과 같이 선언한다고 가정하자.
#include <stdlib.h>
DATA* data = (DATA *)malloc(sizeof(DATA));


위와 같이 선언하면, DATA구조체의 사이즈만큼의 메모리가 할당된다.
여기에서 DATA의 구조를 다음과 같이 가정하면,

typedef struct DATA DATA;
struct DATA{
     int a;
     int b;
     char c;
};


sizeof(DATA)의 결과로, 9byte가 나와야 한다. -> int(4) + int(4) + char(1) = DATA(9)
하지만 실제로 찍어보면 12byte가 나올 것이다.


이유인즉슨, 32bit의 컴퓨터에서 보다 빠른 연산을 위해 4바이트 단위로 메모리를 할당하기 때문에 생기는 현상이다.
이것을 패딩비트(padding bit)라고 한다. 혹은 메모리 정렬(memory alignment)이라고도 한다.
컴파일러의 옵션을 통해 패딩비트가 발생하지 않도록 할 수 있다고 한다.

'C Programming' 카테고리의 다른 글

메모리 해지시 발생하는 에러의 원인  (0) 2011.07.10
Posted by 와일드_
|