본문으로 바로가기

[C] gcc의 mcmodel 옵션

category 프로그래밍/C 2020. 12. 28. 20:46
728x90
반응형

gcc를 사용하여 컴파일 하다보면 이런 경우가 생길 수 있습니다.

소스코드에서 메모리를 크게 할당해버리면 gcc에서 에러가 나거나, 프로그램 실행이 되지 않습니다.

그럴때 쓰는 옵션이 바로 gcc의 mcmodel 입니다.

mcmodel은 컴파일 시, 메모리 모델 기법 입니다. 이 옵션에 해당되는 모델을 사용하여 코드를 생성하고, 데이터를 저장하도록 컴파일러에 명령을 내립니다.

아래와 같이 사용합니다.

ex ) gcc -o test test.c -mcmodel=medium

mcmodel 옵션은 small, kernel, medium, larg 총 4가지 종류가 있습니다.

하나 하나 살펴보겠습니다.

-mcmodel=small : 기본값이며, 이 모델은 메모리에서 코드 영역과 데이터 영역이 2GB 주소 공간 내에서 실행됩니다.

포인터는 64비트입니다. 프로그램은 정적 또는 동적으로 링크될 수 있습니다.

즉, 코드 영역이나 데이터 영역이 2GB를 넘어버리면 실행에 문제가 발생합니다.

-mcmodel=medium : 이 모델의 경우 코드 영역은 2GB 이내이고, 데이터 영역은 제한이 없습니다.

-mcmodel=large : 이 모들은 메모리에 대한 제한이 없습니다. 무제한이라고 보시면 됩니다.

-mcmodel=kernel : 커널 코드 모델에 대한 코드를 생성합니다. 커널은 2GB의 주소 공간에서 실행됩니다. 

이 모델은 코널 코드에 사용합니다.

프로그램에 맞게 옵션을 잘 사용하시면됩니다.

이상입니다.

728x90
반응형

'프로그래밍 > C' 카테고리의 다른 글

[C] 정상적으로 tcp 소켓 통신이 종료 되었을 경우  (0) 2021.03.23
[C] epoll 이란  (0) 2020.12.28
[c언어] 소켓 함수 타임아웃  (0) 2020.07.21
[C] TCP 소켓  (0) 2020.03.09
[C] socket 함수  (0) 2020.03.05