int arg Test 1int a int b int
프로세서에 따른 다른 결과의 예 int arg. Test 1(int a, int b, int c, int d){ return a+b+c+d; } void main(){ int s = 0; s = arg. Test 1(1, 2, 3, 4); } int arg. Test 2(int a, int b, int c, int d, int e, int f){ return a+b+c+d+e+f; } void main(){ int s = 0; s = arg. Test 2(1, 2, 3, 4, 5, 6); }
1. 메모리 최적화 - RAM 최적화 #include<stdio. h> struct SR{ unsigned int CF : 1 , PF : 1, AF : 1, ZF : 1, SF : 1, IF : 1, MOD : 4; }; void main(){ struct SR flag={1, 1, 0, 1, 0 x. F}; if(flag. CF) printf("carry₩n"); if(flag. PF) printf("parity₩n"); if(flag. AF) printf("assistant carry₩n"); if(flag. ZF) printf("zero₩n"); }
3. 분기 최적화 before> if(a==1){ }else if(a==2){ }else if(a==3){ }else if(a==4){ }else if(a==5){ }else if(a==6){ }else if(a==7){ }else if(a==8){ } after> if(a<=4){ if(a==1){ }else if(a==2){ }else if(a==3){ }else if(a==4){ } }else{ else if(a==5){ }else if(a==6){ }else if(a==7){ }else if(a==8){ } }
3. 분기 최적화 #include<stdio. h> void main(){ int a, b, c, d, x=0, t; a=b=3; c=5; d=6; t = ((a*c)+b)/d; if(t == 0) x = t + 5; else if(t == 1) x = t + 10; else if(t == 2) x = t + 15; else if(t == 3) x = t + 20; else if(t == 4) x = t + 25; else x = 0; printf("%d₩n", x); }
3. 분기 최적화 #include<stdio. h> void main(){ int a, b, c, d, x=0, t; a=b=3; c=5; d=6; t = ((a*c)+b)/d; switch(t){ case 0: x = t + 5; break; case 1: x = t + 10; break; case 2: x = t + 15; break; case 3: x = t + 20; break; case 4: x = t + 25; break; default: x = 0; } printf("%d₩n", x); }
3. 분기 최적화 int f 1(int a) { switch(a){ case 0: return 0 x 3 f; case 1: return 0 x 06; case 2: return 0 x 5 b; . . . case 213: return 0 x 61; default : return 0 x 00; } } void main(void) { f 1(3); } int f 1(int a) { int b[] = {0 x 3 f, 0 x 06, 0 x 5 b, . . . , 0 x 61}; return b[a]; } void main(void) { f 1(3); }
5. ARM 최적화 – 루프 최적화 다운 카운팅이 효과적 int test 1(int x) { int i, j=1; for(i=1; i<=x; i++) j *= i; return j; } int test 2(int x) { int i, j=1; for(i=x; i!=0; i--) j *= i; return j; }
5. ARM 최적화 – 레지스터 활용 팁 지역 변수의 주소를 가급적 사용하지 않는다. void f 1(int *x); int f 2(int a){ int i; f 1(&a); for(i=0; i<10; i++) a *= i; return a; } int f 2(int a){ int i, tmp; tmp=a; f 1(&tmp); a=tmp; for(i=0; i<10; i++) a *= i; return a; }
5. ARM 최적화 – 레지스터 활용 팁 지역변수의 데이터 타입은 int나 unsigned int로 char test. Char(char a){ return a+1; } short test. Short(short b){ return b+1; } 함수의 인자 개수는 4개 이하로
- Slides: 34