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 

 gcc로 컴파일해서 열심히 프로그램을 돌리다보면 Segmentation Fault가 나는 경우가 있다. 
보통 배열에 접근할 때나 포인터를 넘길 때 잘못하면 이런 문제가 생기는데 보통 for문 등 루프에서 배열에 접근할 때의 조건을 잘 보면 해결된다. 그런데도... Segmentation Fault가 해결이 안된다면 Valgrind를 사용해보자.

우분투의 경우 apt-get install valgrind 를 이용해 설치하면 되며 이외에는 valgrind.org에서 다운로드 받아 설치하면 될 것 같다..
(우분투만 써봐서요...ㅎㅎ)

설치 후 컴파일에서 옵션을 주어야 하는데 -g를 꼭 넣어줘야 한다.

Valgrind의 옵션은 꽤 다양해서 Valgrind --help를 입력해 옵션의 설명을 보는 것도 유용하다. 그래도... 귀찮다면

valgrind --leak-check=full --log-file=memcheck.txt -v --error-limit=no ./abc.out arg1 arg2
옵션은 버전마다 다를 수 있으므로 확인해서 맞는 옵션을 쓰자.

프로그램이 실행되면 로그가 memcheck.txt에 남게 되는데 이를 열어서 보면.... 꽤 많은 기록이 쏟아져 나온다.
우선 로그의 좌측 숫자는 프로그램의 PID이며 에러의 경우 == PID == 로 나타난다. -- PID --라면 이는 일반적인 정보이다.

다음의 블로그에서 정보를 얻었다.
http://adnoctum.tistory.com/555
 

이제 전공을 위해서 C를 열심히 공부해야 할 때가 왔습니다.. 두둥!

 

그래서 C를 위한 컴퓨팅 환경을 만들기 시작했어요.

 

그냥 빌게이츠 아저씨의 Visual Studio 6.0을 깔아서 쓰려고 했습니다. 그런데... 왠지 뽀대도 안나고 gcc 컴파일러를 꼭 써보고 싶다는 욕구가 들더라구요.. 대부분 연구실에서 리눅스를 쓰기도 하구요..

 

근데 리눅스를 써서 프로그래밍을 배우기엔... 너무 시간이 벅찬 관계로 윈도우에서 gcc를 돌리는 방법을 찾았습니다. 그러니 MinGW라는 프로그램이 나오더라구요. ㅋㅋ 물론! Linux + gcc 조합에 비해선 부족하다고 하지만 입문엔 이만한 툴도 없을까 싶어서 낼름 설치했습니다.

 

그리고 IDE(뭐 대충... 프로그래밍을 편하게 해주는 나모웹에디터 같은 존재라네요.)로는 인터넷을 뒤지다가 SUN의 이클립스(Ecliplse)를 쓰기로 했습니다.

 

장장 한시간 반동안 삽질해서 간신히 성공했네요...ㅋㅋ

 

첨에 에러가 계속 떠서 당황했는데 알고보니... 저장하고 컴파일하면 되는 것이었습니다. ㅡ.ㅡ

저장안하고 컴파일하면 에러나네요 ㅋㅋㅋ

  

 



 


방법이야 구글링을 하거나 네이버에 묻거나 하면 다 나오지만... 간단히 저도 메모를 합니다.

1. 일단 MinGW 윈도우 버전을 다운로드 받는다. (http://sourceforge.net/projects/mingw/files/)

 - 그냥 녹색 버튼(Download now!)를 클릭했다.


2. 실행하면 압축파일 엄청 튀어나오고... install을 눌러서 설치. (옵션은... 모조리 설치했던 듯...)


3.MinGW가 설치된 폴더 안에서  mingw32-make.exe 파일을 찾아 make.exe파일로 이름만 바꿈.


4. 그 다음 배치파일(글 아래 주소 참고)을 만들어서 실행. (한번만 했어요.. 이게 뭐하는건지 이해보단 실천먼저 해서...ㅋ)


6. http://java.sun.com에 가서 JRE(java runtime environment)또는 JDK를 설치. 

(전 다운로드 받는데 느려서... 가벼운 JRE를 설치했습니다.)


7. http://www.eclipse.org/downloads/에 가서 Eclipse IDE for C/C++을 다운로드 받아서 설치한다.


8.  끝! (프로젝트를 만들고 코딩한 다음에 꼭 저장하고 빌드할 것! 안그럼 에러를 뱉어냄...ㅠ)


자세한 문서는 KLDP문서를 참고하세요. (http://kldp.org/node/48962)

이 글을 천문노트에도 같이 올렸습니다. 코멘트가 궁금하시면 클릭


+ Recent posts