GCC 몇 가지 옵션 학습
최근 에 GCC 의 옵션 을 연 구 했 는데 비교적 재 미 있 습 니 다. 골 라 서 공부 하 세 요.컴 파 일 러 는 프로그래머 의 중요 한 도구 로 서 GCC 는 컴 파 일 러 에서 가장 광범 위 하 게 응용 되 고 곳곳에 친근 한 디자인 과 기능 지원 을 나타 낸다.
Table of Contents
현재 GCC 를 사용 하고 있 는 정 보 를 보 여 줍 니 다. erlv 의 Debian AMD 64 에서 결 과 는 다음 과 같 습 니 다.GCC 의 이 필드 들 이 무슨 뜻 인지 에 대해 서 는 이 박문 을 참고 하 시기 바 랍 니 다.
$ gcc -dumpmachine
x86_64-linux-gnu
2 -xc
사실은 - xc 와 '- x c' 는 같다.
3 -dM
실제 사전 처 리 를 하지 않 고 모든 \ # define 의 매크로 만 표시 합 니 다. 이 매크로 들 은 대부분 시스템 구조 와 GNU 와 관련 되 거나 포 함 된 헤더 파일 에서 나 옵 니 다.
# ,
$gcc -E -dM hello.c
그리고 - dchars 의 조합 옵션 도 있 습 니 다.
4 -print-file-name=include
GCC 기본 검색 include 헤더 파일 을 인쇄 하 는 경로
$ gcc -print-file-name=include
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.6.1/include
5 -isystem DIR
DIR 경 로 를 헤더 파일 검색 경로 중 하나 로 합 니 다.검색 순서: - I 가 지정 한 폴 더 = - isystem 이 지정 한 폴 더 = 표준 시스템 헤더 폴 더.
6 -nostdinc/-nostdinc++
표준 시스템 헤더 파일 디 렉 터 리 를 검색 하지 말고 - I 가 지정 한 경로 만 검색 하 십시오.
7 -Wp/-Wa/-Wl
이 세 가 지 는 각각 예비 처리 기, 어셈블러, 링크 기 에 전 달 된 인 자 를 지정 하 는 데 사용 된다.
작은 끝 / 큰 끝 시스템 에 코드 를 컴 파일 합 니 다.기본 값 은 작은 끝
9 -DMACRO/-UMACRO
매크로 MACRO 정의 / 매크로 MACRO 정의 취소
10 -G num
전역 과 정적 대상 의 크기 를 num 바이트 보다 작은 데이터 로 나 누 어 bss 엔 드 의 작은 데이터 에 넣 습 니 다.기본 num 값 은 8 입 니 다.
MIPS 는 기호 로부터 주 소 를 받 을 때 높 은 16 자 리 를 먼저 꺼 내 고 낮은 16 자 리 를 꺼 내 맞 춤 법 으로 최종 주 소 를 얻어 야 하기 때문에 두 번 의 액세스 작업 이 필요 하 다.프로그램 에서 정적 과 전역 데 이 터 를 대량으로 사용 할 때 이런 방식 은 프로그램 을 느리게 할 수 있다.그래서 GP 레지스터 를 이용 하여 최적화 하 는 방법 이 생 겼 다. 즉, GP 레지스터 와 상대 적 으로 오프셋 하 는 방식 으로 방문 하여 방문 횟수 를 낮 추 는 것 이다.문 제 는 컴 파일 러 와 어셈블러 가 컴 파일 할 때 어떤 변 수 를 GP 레지스터 로 접근 할 수 있 는 지 확인 해 야 한 다 는 것 이다.일반적인 방법 은 크기 가 일정 치보다 작은 변 수 를 GP 레지스터 를 통 해 접근 하 게 하 는 것 이다.
num 이 0 이면 이 최 적 화 를 닫 는 것 을 표시 합 니 다.
11 -msym32/-mnosym32
어떤 ABI 를 취하 든 모든 기호 가 32 비트 의 값 이 라 고 가정 하지 않 습 니 다.이 옵션 은 - mabi = 64 와 - mno - abicall 에 맞 출 때 매우 유용 합 니 다. 가설 을 통 해 32 비트 데이터 로 더 작고 빠 른 기호 주 소 를 만 들 수 있 기 때 문 입 니 다.
12 -fdelete-null-pointer-checks/-fno-delete-null-pointer-checks
delete - null - pointer - checks 는 최적화 수단 으로 전체적인 데이터 흐름 분석 을 통 해 모든 빈 포인터 에 대한 검 측 작업 을 식별 하고 삭제 합 니 다.컴 파일 러 는 빈 포인터 에 대한 해석 인용 이 프로그램 이 종 료 될 것 이 라 고 가정 합 니 다.그러나 일부 환경 에서 이 결론 이 반드시 성립 되 는 것 은 아니 기 때문에 O2, O3 와 Os 는 이 최 적 화 를 시작 할 것 이다.그래서 GCC 에 옵션 이 추가 되 었 습 니 다. - fno - delete - null - point - checks.
13 -mcheck-zero-division/-mno-check-zero-division
정수 0 을 나 눌 때 빠 지 거나 빠 지지 않 습 니 다.
14 -mabicalls/-mno-abicalls
SVR 4 형식의 동적 대상 코드 를 생 성 / 생 성하 지 않 고 기본적으로 생 성 합 니 다.
15 -mbranch-likely/-mno-branch-likely
지정 한 시스템 구조 가 기본적으로 지원 되 든 안 되 든 branch likely 명령 을 사용 하거나 사용 합 니 다.GCC 는 기본적으로 branch likely 명령 을 지원 하 는 시스템 구조 에 branch likely 명령 을 생 성 합 니 다.
이러한 명령 을 도입 하 는 것 은 점프 가 발생 할 수 있 는 명령 을 도입 하기 위해 서 이다. 그러면 컴 파일 러 는 MIPS 중의 delay slot 를 충분히 이용 할 수 있다.
16 -fstack-protector
가능 한 버퍼 넘 침 을 위해 추가 검사 코드 를 생 성 합 니 다.
17 -fstrict-overflow
컴 파일 러 가 엄격 한 기호 넘 침 규칙 을 사용 하도록 허용 합 니 다.
18 -fconserve-stack
창고 에 대한 사용 을 되도록 줄이다.
19 참조
다음으로 전송:https://www.cnblogs.com/cnland/archive/2013/02/08/2909248.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.