Linux2009. 5. 27. 09:57
저번에 윈도우에서 Release mode로 컴파일 할때는 용량 변화가 전혀 없었는데..
리눅스에서 한번 혹시나? 하는 마음에 해보게 되었다.

-rw-rw-r-- 1 morpheuz dev   98 May 27 09:51 for.c
#include "stdio.h"

void main()
{
	int idx;

	for(idx = 0; idx < 5; idx++)
	printf("%X\n",idx);
}

-rw-rw-r-- 1 morpheuz dev  166 May 27 09:52 iter.c
#include "stdio.h"

void main()
{
	int idx = 0;

	printf("%X\n",idx++);
	printf("%X\n",idx++);
	printf("%X\n",idx++);
	printf("%X\n",idx++);
	printf("%X\n",idx++);
}

-rw-rw-r-- 1 morpheuz dev   98 May 27 09:51 for.c
-rwxrwxr-x 1 morpheuz dev 4749 May 27 09:52 for.o
-rw-rw-r-- 1 morpheuz dev 1446 Apr 13 17:19 iter.c
-rwxrwxr-x 1 morpheuz dev 4830 May 27 09:52 iter.o

리눅스에서는 윈도우와 다르게 for문에 의한 용량 감소가 확연히 눈에 띈다
Posted by 구차니
embeded/80512009. 4. 21. 17:36
if(tempUnicode == 0x00E0)        output[out_idx] = 0x80;
else if(tempUnicode == 0x00E0) output[out_idx] = 0x80;
else if(tempUnicode == 0x00E0) output[out_idx] = 0x80;
...
else if(tempUnicode == 0x00E0) output[out_idx] = 0x80;
// 대략 128개

이녀석을 컴파일 하면
Program Size: data=189.7 xdata=0 code=10418

if(tempUnicode == 0x00E0)        res = 0x80;
else if(tempUnicode == 0x00E0) res = 0x80;
else if(tempUnicode == 0x00E0) res = 0x80;
...
else if(tempUnicode == 0x00E0) res = 0x80;
// 대략 128개

이녀석을 컴파일 하면
Program Size: data=187.7 xdata=0 code=9518


별거 아닌 코드이지만, 900byte 차이가 난다.
결론. 8051에서는 배열사용을 자제하자(switch / if-else 문처럼 한번의 액션에 분기되는 거라면)
Posted by 구차니