2009-09-29 3 views

답변

12

가장 쉬운 방법은 함수를 자체 컴파일 단위에 넣고 최적화 플래그없이 컴파일합니다.

최근 GCC 버전 (4.4 나는 생각한다)은 일반적으로의 디버그/릴리스 버전을하는 것은 보증 not__ __do 최적화

+1

컴파일러를 사용하지 않도록하는 기능에

__attribute__((optimize(0))) 

를 사용, 기능에 따라 최적화를 제어하는 ​​속성이 바이너리는 같은 ABI 또는 패딩 (padding) 등을 가지고 있습니다. 따라서 (일반적으로) 컴파일러에서 작동 할 수도 있다고 생각하는 것은 안전하지 않습니다. –

+2

예가 있습니까? Microsoft는 디버그 실행 파일에 대해 다른 C 런타임을 사용하지만 크로스 모듈 함수 호출과 구조 정렬 상호 운용성이 보장된다는 것을 알고 있습니다. 그리고 gcc는 내가 알고있는 한 모든 정권에서 100 % 호환 출력을 생성합니다. 분명히 구조체 정렬과 ABI 같은 것들이 언어 표준의 영역 밖에 있으므로, 컴파일러는 디버그 출력을 생성 할 때 이들을 존중할 필요가 없습니다. 하지만 그것은 실용적인 것보다 더 중요한 포인트입니다. –

+0

OP는 gcc에 대해 물었고 gcc는 다른 "디버그"및 "릴리즈"ABI와 같은 넌센스가 없습니다. –

관련 문제