2017-03-22 13 views
-3

저는 C++로 프로그래밍하고 있으며, 마술 값에 매크로 대신 정적 const 변수를 사용하려고합니다. 이 예에서 : 정적 const 변수를 매크로로

103ec8: e283300a add r3, r3, #10 

그러나 I 변수는 여전히 메모리 공간을 차지 참조 :

static const int myx = 10; 

int incbyx(int y){ 
    return y + myx; 
} 

직접 생성되는 어셈블리는 값 10을 이용한다. 나는 --syms 옵션을 objdump를 사용하여이 결론에 도달 : 변수 자체는 참조하지 않기 때문에

001059a8 l  O .data 00000004 myx 

나는이에 대한 필요성을 볼 수 없습니다. 컴파일러/링커가 데이터 섹션의 공간을 절약하지 않도록 지시 할 수 있습니까? 또는 매크로가 포함되지 않은 다른 제안이 있습니까?

+3

최적화를 사용하여 컴파일 했습니까? –

+2

빌드 또는 릴리스 디버그 또는 릴리스 어떤 최적화 수준? 디버그 빌드가 왜 이런 최적화가 일어날 것으로 예상합니까? –

+0

빠른 응답을 보내 주셔서 감사합니다! 그리고 네, 디버그와 -O0로 컴파일하고있었습니다. 디버그 플래그를 제거하고 O2로 문제가 완전히 사라졌습니다! 멍청한 질문에 대해 유감스럽게 생각합니다! – joseCM

답변

1

myx의 주소를 사용하는 경우 해당 주소가 있어야합니다. 그렇게하지 않으면, 컴파일러는 그것을 삭제할 수 있습니다.

최적화가 설정된 좋은 컴파일러를 사용하면됩니다.

0

최적화가 활성화 된 경우 매크로와 상수로 생성 된 코드는 동일합니다 (demo 참조).