'코드 최적화'에 해당되는 글 1건

  1. 2009.04.21 8051에서는 코드의 순서가 코드의 크기를 좌우한다? (7)
embeded/80512009.04.21 17:51
신기한 현상을 발견했다.
코드의 위치에 따라 용량이 상당히 많이 변한다는 사실!

for(idx = 0; idx < len; idx++)
{
	tempUnicode = input[idx];
	if(0x0020 <= tempUnicode && tempUnicode < 0x0080)	res = (char)(tempUnicode & 0x00FF);
	else if(tempUnicode == 0x00E1)						res = 0x80;
	else if(tempUnicode == 0x00E0)						res = 0x81;
	...
	else if(0x0400 < tempUnicode && tempUnicode <= 0x045F)
	{
		switch(tempUnicode)
		{
			case 0x0401:	res = 192 +	0;	break;
			case 0x0402:	res = 192 +	1;	break;
			...
		}
	}
	else												res = ' ';
}

Program Size: data=187.7 xdata=0 code=9505

for(idx = 0; idx < len; idx++)
{
	tempUnicode = input[idx];
	if(0x0020 <= tempUnicode && tempUnicode < 0x0080)	res = (char)(tempUnicode & 0x00FF);
	else if(0x0400 < tempUnicode && tempUnicode <= 0x045F)
	{
		switch(tempUnicode)
		{
			case 0x0401:	res = 192 +	0;	break;
			case 0x0402:	res = 192 +	1;	break;
			...
		}
	}
	else if(tempUnicode == 0x00E1)						res = 0x80;
	else if(tempUnicode == 0x00E0)						res = 0x81;
	...
	else												res = ' ';
}

Program Size: data=189.7 xdata=0 code=9698

바뀐건, else if() 내부에 switch()가 있는 경우의 위치가 바뀐 경우이다.
속도 최적화를 위해 빨리빠져 나갈수 있도록 위로 옮겨 주었떠니 용량이 무려!!!
193 바이트나 늘어났다.. OTL

아마도..
코드사이즈가 커지면서 MOV대신 MOVX 라던가..
이런식으로 명령어에 넣어야 하는 주소의 크기가 달라지면서 발생하는 문제가 아닐까 생각이 된다.
Posted by 구차니

댓글을 달아 주세요

  1. 프로그래밍에서는 용량을 줄이는 것도 중요하겠군요.
    저는 그냥 무턱대고 짠다는.. 푸...

    2009.04.21 22:20 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 아.. 일반 컴퓨터용 프로그램은 굳이 신경을 안써도 된답니다 ^^; 임베디드의 경우에 그것도 아주 작은 시스템일 경우에 한해서죠 ^^;

      2009.04.21 22:24 신고 [ ADDR : EDIT/ DEL ]
    • 그래도 똑같은 코드를 반복할 때는 조금 차이가 있겠죠?
      혹시 그 16KB 말하시는건가요? ㅎㅎ

      2009.04.22 16:45 신고 [ ADDR : EDIT/ DEL ]
    • 아 16KB에서 8KB로 줄었.. OTL

      2009.04.22 16:46 신고 [ ADDR : EDIT/ DEL ]
    • 켁.. 용량 압박이군요.
      8KB라면 8192Bytes...
      힘드시겠네요. 파이팅입니다!!

      2009.04.22 16:53 신고 [ ADDR : EDIT/ DEL ]
  2. 속도 최적화 -> 용량 증가
    거의 정석 아닌가 싶습니다 ㅋ

    2009.04.22 16:20 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 둘다 잡으면 천재인가요 ㅋㅋ
      음.. 함수화 시키면은 용량증가를 억제하고
      속도도 만족할 만하게 돌릴 수 있을거 같긴하던데요 ^^;

      그래봤자.. 8K 보다 크므로 무효에요 ㅠ.ㅠ

      2009.04.22 16:33 신고 [ ADDR : EDIT/ DEL ]