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 |