신기한 현상을 발견했다.
코드의 위치에 따라 용량이 상당히 많이 변한다는 사실!
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 라던가..
이런식으로 명령어에 넣어야 하는 주소의 크기가 달라지면서 발생하는 문제가 아닐까 생각이 된다.