programing

gcc에서 컴파일러 최적화를 비활성화하는 방법

prostudy 2022. 6. 29. 20:37
반응형

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

반응형