본문 바로가기

C/C++/Tip

[메모리 아끼기] 문자로 상수 표현하기.

반응형

메모리 절약을 위해 문자로 상수 표현하기. ( char(1) 로 int(4) 표현. )

 

가끔 오픈 소스나 조금 오래된 소스들을 보다 보면,

 

옛날의 사양이 좋지 못한 장비때문인지 메모리를 아끼기 위한

개발자들의 깨알같은 잔머리? 가 조금씩 보인다.

 

그중 하나가 이 방법이다.

 

 

int 형과 char 형.

이둘중 메모리를 더 많이 필요로 하는건 당연히 int 형이다.

그래서 char 형을 이용해 int 형의 상수를 표현할수 있게끔,

아스키 코드값을 이용한 코딩이다.

 

 

예제 소스 및 결과 화면.

 

소스.

 

결과.

간략한 소스이므로 , 선언부나 출력문에 대한 설명은 스킵..

a 라는 배열안에 "1234" 를 초기값 으로 던저주고

이걸 한자리씩 %d 로 찍으면

a 0번지에 있는 값은 상수 1 이 아닌 문자 '1' 이므로 '1' 에 대한 아스키 코드 값이 나오게 된다.

하지만 여기에 '0' 을 뺴버리면 아스키 코드 값인 49가 나오지 않고

내가 원하는 상수 1 이 나온다.

이러한 결과가 나오게 되는 원리는

아스키 코드 표를 보시면

바로 알수 있는데,

'0' 의 아스키 코드 값은 48 이고

'1' 은 49, '2' 는 50....'9' 는 57 이다.

아스키 코드 값 49를 가진 '1' 에 아스키 코드값 48을 가진 '0' 을 빼버리면 ?

값은 1이 남고 결국 상수 1이라는 값을 갖게된다.

이런식으로 코딩을 해서 사용할수 있는건,

패킷 통신에서 받은 버프안의 값을 이용해

switch 문 등에서 1, 2, 3, 4...9 등의 case 를 조건으로 걸어야 할때

굳이 int 형 변수를 두고 atoi 로 받아오지 않고도

-'0' 을 해주면 상수 1~9 까지의 값을 가질수 있게 된다.

지금이야...장비들 성능이 좋아서, 굳이 메모리를 잔뜩 아껴가면서

개발을 할 필요성이 크진 않지만,

혹시나 열악한 환경에서의 개발이 이뤄진다면,

써먹을만한 방법이 아닌가 싶다.

 

반응형