[그림 1 - 1]


[그림1-1]과 같은 코드에서 testchar(1)+double(8)+int(4) 13으로 알고 있을 것이다.

하지만 실제 코드를 쳐 보면 예상하던 사이즈와 다른 것을 알수 있다.

 

이것은 내가 현재 쓰고 있는 64비트 컴퓨터에서 64비트 컴파일러를 사용하여 8바이트 데이터를 처리하는 것에 가장 최적화되어 있고 이러한 이유로 데이터를 저장하기 위한 공간을 8바이트씩 할당 받기 때문이다.

 

위에 코드를 예를 들면

 

char형을 저장하기 위해 8바이트를 할당받고 char형을 저장한다. 그러면 7바이트가 남는데 그 남은 공간에 double(8)를 저장할 수 없어 7바이트를 빈공간으로 남겨두고 바로 8바이트를 다시 할당하는 것이다.


char 

2

 double

 

 

 

 

 

 

 




이러한 공간낭비를 줄이기 위해서는 1) 8바이트로 저장될 것을 고려하여 저장하는 방법2) 특별한 전처리어를 사용하면 된다.

 

1) 먼저 8바이트가 저장될 것을 고려하여 저장하여 보자.

 

8바이트가 저장될 것을 고려하여 저장할 경우 구조체의 멤버 변수 선언의 순서가 중요하다

 

순서는 다음과 같이 바꿀수 있다.

double         double

int     or     char

char           int



double 

 

 

 

 

 

 

 

 int

 

 

 

 char

 

 

 




[그림 1 - 2]


2) #pragma pack() 전처리어 사용


[그림 1 - 3]


pragma pack(1)에서 1 1바이트 단위로 저장하겠다는 것이다.

 

, CPU64비트이기 때문에 가장 빠르게 읽을 수 있는 데이터의 단위는 8바이트이다.

그렇기 때문에 저장할 때 1이라고 선언하고 나중에 원래대로 8바이트 단위로 바꾸지 않는 다면 속도저하의 문제가 발생할 수 있다.




출처:http://javawoo.tistory.com/30

+ Recent posts