본문 바로가기
Algorithm/이론

코드 최적화란?

by Ujajuck 2021. 10. 30.

요즘 c로 돌아가면서, 코드 효율화에 대한 고민을 하게 되었다.

그때그때 찾아보다가 잊을거 같아서 한데 모아 놓으려 한다.

언제나 그렇듯 드럽게 진도가 안나간다

 

요약

1. 나눗셈을 줄이자

2. 비트 연산을 활용하자

3. 포인터를 활용하자

4. 인라인 함수를 사용하자

5. 함수 호출을 줄이자 

 

1. 나눗셈을 줄이자

나눗셈은 가장 시간이 오래 걸리는 연산이다. 아래와 같은 경우 매번 나눗셈을 하는것 보다 if문을 활용하여 0으로 돌려주는것이 좋다.

 

 

4. inline 함수를 사용하자 

inline 함수: 함수 호출 시 별도로 분리된 위치의 레이블로 점프하여 실행되는 일반 함수와는 달리 컴파일러가 함수를 복제 하여 넣어준다.  C99 부터 생겼단다. 라떼는 안배웠던 신기능이다. 

즉, 컴파일러가 보기에 이 코드는

#include <stdio.h>

_inline void SayHello() { printf("Hello!"); }

void main(){
	SayHello();
	return;
}

이거랑 같다.

#include <stdio.h>

void main(){
	{ printf("Hello!"); }
	return;
}

메모리 측면에서는 불리하지만, (이걸 반복해서 붙인다고 생각해보자. ) 속도가 빠르다는 장점 있다.

 

define(매크로) 함수: 전처리 단계에서 치환하는 것. 타입검사를 하지 않는다.\

#include <stdio.h>
#define Wrong(X) X*X
#define Right(X) (X)*(X)
#define Str(X) #X "+" #X
#define Concat(X) X ## X

void main(){
	int x = 5;
	printf("%d\n",Wrong(x));//5*5=25
	printf("%d\n",Wrong(x+3));//x+3*x+3=5+15+3=23
	printf("%d\n",Right(x+3));//(x+3)*(x+3)=64
	printf("%s\n",Str(x));//#: 인자를 문자열로 인식한다.
	printf("%d\n",Concat(10));//토큰 결합연산자 ## 문자열 1010
	return;
}
반응형

'Algorithm > 이론' 카테고리의 다른 글

알고리즘에 자주 나오는 키워드  (0) 2021.07.01

댓글