메모리에 저장할 때 최적화. 공부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 메모리 최적화 중에 한가지를 선택하게 된다.
임베디드 시스템은 적은 메모리를 사용해야 할 때도 있기 때문에 유념하자.
'공부' 카테고리의 다른 글
0114) 머지 정렬 (0) | 2011.01.14 |
---|---|
getchar 와 putchar 에 대한 고찰 / 버퍼 / 스캔 코드 / printf , scanf 귀찮아~~ (0) | 2010.10.20 |
포인터와 캐스트 (0) | 2010.10.17 |
C언어 / 구구단 소스. (0) | 2010.10.17 |
논리 연산자 계산순서( || && ) / 증감 연산자 (0) | 2010.10.17 |