gcc에서 컴파일러 최적화를 비활성화하는 방법
저는 어셈블리 언어를 배우려고 합니다.를 검색하여 분해하는 방법을 찾았습니다..c
최적화된 버전의 프로그램을 만들 수 있을 것 같습니다.제 C파일에 해당하는 정확한 어셈블리 코드를 알 수 있는 방법은 없습니까?
gcc 옵션-O
는, 다양한 레벨의 최적화를 netable로 합니다.사용하다-O0
사용하지 않도록 설정하다-S
출력 어셈블리에 접속합니다. -O3
최적화의 최고 레벨입니다.
gcc 4.8부터의 최적화 레벨-Og
사용할 수 있습니다.디버깅을 방해하지 않는 최적화를 이노블로 하여 표준 편집-컴파일-디버깅사이클에서 권장되는 기본값입니다.
어셈블리 언어를 intel 또는 att use로 변경하려면-masm=intel
또는-masm=att
.
특정 최적화를 수동으로 활성화할 수도 있습니다.-fname
.
자세한 내용은 gcc 매뉴얼을 참조하십시오.
명령줄 옵션 사용-O0
(-[대문자 o][제로])를 사용하여 최적화를 비활성화합니다.-S
어셈블리 파일을 가져옵니다.자세한 gcc 명령줄 옵션은 여기를 참조하십시오.
복사하지 않고 테스트하고 생성자/연산자를 복사/이동하는 것을 보려면 "-fno-elide-constructors"를 추가합니다.
최적화(-O0)가 없는 경우에도 GCC와 Clang은 여전히 복사 삭제를 수행하므로 경우에 따라서는 복사/이동 컨스트럭터를 건너뛸 수 있습니다.복사 삭제에 대한 자세한 내용은 이 질문을 참조하십시오.
단, Clang 3.4에서는 버그(컨스트럭터를 호출하지 않는 비활성 일시 객체)를 트리거합니다.이것은 3.5에서 수정되고 있습니다.
#pragma GCC 푸시_옵션을 사용하여 내부적으로 최적화를 제어할 수도 있습니다.
#pragma GCC push_options
/* #pragma GCC optimize ("unroll-loops") */
.... code here .....
#pragma GCC pop_options
gcc의 경우 컴파일러에 전달된 -O1 -O2 또는 -O3 옵션을 생략하거나 이미 있는 경우 -O0 옵션을 추가하여 다시 끌 수 있습니다.디버깅에 -g를 추가하면 디버거에서 c 소스 및 분해된 머신 코드를 볼 수 있습니다.
참고 항목: http://sourceware.org/gdb/onlinedocs/gdb/Optimized-Code.html
오래 전 일이지만, 여전히 필요했어요.
info - https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
list - gcc -Q --help=optimizers test.c | grep enabled
disable as many as you like with:
gcc **-fno-web** -Q --help=optimizers test.c | grep enabled
gcc 명령줄에서 O0을 전달하면 최적화를 해제할 수 있습니다.
예: .C 파일을 .S 파일 호출로 변환하려면:
gcc - O0 - S test.c
언급URL : https://stackoverflow.com/questions/5765899/how-to-disable-compiler-optimizations-in-gcc
'programing' 카테고리의 다른 글
포인터가 일정하고 휘발성이 있다고 선언되었습니다. (0) | 2022.06.30 |
---|---|
로드 시 Vue.js v-if 및 v-f를 포함하는 HTML 태그 (0) | 2022.06.29 |
지역 의존 해시를 이해하려면 어떻게 해야 하나요? (0) | 2022.06.29 |
Vue 2. JSX에서 v-html을 사용하는 방법 (0) | 2022.06.29 |
자바 클래스 파일 형식의 메이저버전 번호 목록 (0) | 2022.06.29 |