달력

12

« 2024/12 »

  • 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
2010. 10. 17. 18:55

메모리에 저장할 때 최적화. 공부2010. 10. 17. 18:55

메모리에 저장할 때
 >> 메모리 최적화 (메모리 아낌)
 >> 속도
둘중에 하나를 중시할 수 있다.

                     
                        자료형을 다양하게 준 뒤 해당 변수들의 주소를 추적하게 되면



                                 16진수로 해당 주소들을 확인할 수 있다.

자료형에 따라 주소 설정의 크기가 얼마씩 증가하는지 확인해보자.


 자료형 차지 바이트  주소 끝을 10진수로 실제 차이 
 int  4   bffffa38  2616  
 int  4  bffffa34   2612  ↓ 4
 int  4  bffffa30  2608  ↓ 4
 int  4  bffffa2c  2604  ↓ 4
 float  4  bffffa28  2600  ↓ 4
 float  4  bffffa24  2596  ↓ 4
 float  4  bffffa20  2592  ↓ 4
 float  4  bffffa1c  2588  ↓ 4
 short  2  bffffa1a  2586  ↓ 2
 char  1  bffffa19  2585  ↓ 1
 int *  4  bffffa14  2580  ↓ 5
 char  1  bffffa13  2579  ↓ 1
 char *  4  bffffa0c  2572  ↓ 7

char 형은 1바이트, short는 2바이트, int, float, 그리고 포인터형들 char* 나 int* 은 모두 4바이트의 공간을 가진다.

실제 메모리에서 해당 자료형들이 저장될 때 4바이트 단위를 한 줄이라고 생각한다면
아래의 그림과 같다.


                           < 코드에서 소문자, 그림에서 대문자.. 죄송합니다 -_-; >

A,B,C,D 는 int 형이다. 4바이트. 1줄씩 차지했다.
E,F,G,H 는 float 형이다. 4바이트. 1줄씩 차지했다.
I 는 short 형이다. 2바이트. 오른쪽의 2칸을 차지.
J 는 char 형이다. 1바이트. short 바로 왼쪽의 1칸을 차지.
K 는 int* 형이다. 4바이트. 바로 위의 1줄을 차지. (중간에 결손 1바이트 발생)
L 은 char 형이다. 1바이트. 1칸 차지.
M 은 char* 형이다. 4바이트. 바로 위의 1줄을 차지. (중간에 결손 3바이트 발생)


char 다음에 오는 4바이트 단위의 자료형들은 여백을 뛰어넘어 윗줄로 바로 올라간다.
자료형대로의 필요 바이트는 44지만, 실제 사용한건 48바이트이다.

만약에 L 을 J 다음에 선언을 했다면 결손이 없어지게 된다.
이것을 메모리의 최적화라고 한다.

후에 고급 기술로 넘어간다면 속도 or 메모리 최적화 중에 한가지를 선택하게 된다.
임베디드 시스템은 적은 메모리를 사용해야 할 때도 있기 때문에 유념하자.

:
Posted by 투잌