C/C++ 프로그램을 컴파일할 때 최적화 옵션을 주어 속도 향상을 꾀하는 경우가 보통이다. 그런데 잘 살펴보니 gcc와 icc (인텔 컴파일러)에서 기본으로 사용하는 최적화 옵션이 달랐다.


GCC: 기본 최적화 옵션 -> 없음. 우리가 지정해주어야 한다.

ICC: 기본 최적화 옵션 -> O2. 


컴파일 옵션(O1, O2, O3)은 미리 최적화 방법을 만들어 놓은 일종의 프리셋이다. 일반적으로 연구에서 굳이 최적화 옵션을 살펴볼 필요는 없겠지만, O2와 O3의 차이점 정도가 궁금하여 찾아봤다.


'-O' 또는 '-O1'의 경우, 만들어지는 오브젝트, 또는 실행 파일을 가능한 작게 하면서, 컴파일 시간이 오래걸리지 않는 범위에서 최적화를 수행합니다.

'-O2'의 경우, 만들어지는 코드가 가능한 빠르게 수행되도록 하지만, 코드의 크기가 너무 커지지 않도록 하는 범위에서 최적화를 수행합니다.

'-Os'의 경우, '-O2'에서 제공하는 모든 최적화 기능을 다 쓰지만, 코드의 크기를 증가시키는 최적화 기능은 빼고 나서 최적화를 수행합니다.



위 설명의 출처는 KLDP위키 (https://wiki.kldp.org/wiki.php/GccOptimizationOptions) 이다. O2와 O3 모두 코드의 실행 속도가 빠르게 되도록 최적화해주는데 차이가 조금 있다고 한다. 웹에서 조금 찾아보면 O3의 경우 O2보다 반드시 빠르리란 보장도 없으며, 가끔 잘못된 결과를 가져올 수 있다고 한다. 


자세한 것은 모르겠으나, gcc/g++로 컴파일 할 때 최적화 옵션으로 -O2를 반드시 주는걸 잊지 말자.

물론 icc/icpc에선 기본이니까 안줘도 그만이지만.


옵션 주는 방법: gcc prog.c -o prog.out -O2 

C언어로 파일을 읽을 때 fsacnf로 읽을 경우, 마지막에 읽은 값이 두번 나오는 경우가 있다. 다음과 같이 코드를 짰을 경우에 그렇다.


while(!feof(fp)){

 fsacnf(fp, "%s", &var_char);

}


이 경우 feof가 파일의 끝(EOF)을 만나자마자 이를 인지하지 못하기 때문에 발생하는 문제(?)라고 한다. 자세히는 모르겠으나, 해결 방법은 다음과 같이 fscanf의 return 값이 EOF인지 판단하는 것이다.


while( EOF!=fscanf(fp, "%s", &var_char))

   printf("%s", var_char);


출처는 https://kldp.org/node/35102 

우분투에서 웹 서비스를 위한 서버 설정 관련 유용한 링크들


Apache, PHP, MySQL 등의 설치 (apt-get 이용)

http://luckyyowu.tistory.com/105 



Apache에서 홈 디렉토리 위치 변경하기

http://proletariat.tistory.com/entry/%EC%9A%B0%EB%B6%84%ED%88%AC%EC%97%90%EC%84%9C-%EC%95%84%ED%8C%8C%EC%B9%98-%ED%99%88-%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC-%EB%B3%80%EA%B2%BD%ED%95%98%EA%B8%B0-How-to-change-apache-home-directory-in-Ubuntu

+ Recent posts