릴리스 빌드에 대해 -finline-functions 최적화와 함께 gcc를 사용하고 있습니다. 임베디드 시스템에서 작업하기 때문에 코드가 부 풀리는 것을 방지하려면 특정 기능을 인라인하지 말고 싶습니다. 이를 수행하는 확실한 방법은 함수 속성 즉 속성 (noinline)을 사용하는 것입니다. 문제는 -O3 스위치의 일부인 global -finline-function 최적화를 켜면 작동하지 않는 것입니다.gcc -finline-functions behavior?
또한 템플릿과 동일한 기능을 가진 템플릿이없는 버전이 예상대로 인라인되지 않습니다.
이 글로벌 스위치가 켜져있을 때 인라이닝을 제어하는 방법에 대한 아이디어가 있습니까?
#include <cstdlib>
#include <iostream>
using namespace std;
class Base
{
public:
template<typename _Type_>
static _Type_ fooT(_Type_ x, _Type_ y) __attribute__ ((noinline));
};
template<typename _Type_>
_Type_ Base::fooT(_Type_ x, _Type_ y)
{
asm("");
return x + y;
}
int main(int argc, char *argv[])
{
int test = Base::fooT(1, 2);
printf("test = %d\n", test);
system("PAUSE");
return EXIT_SUCCESS;
}
관련이 없지만 대문자가 뒤에 오는 밑줄로 시작하는 식별자는 컴파일러 용으로 예약되어 있습니다. – GManNickG
__attribute __ ((noinline))을 정의에 첨부하면 안됩니까? – jpalecek
@jpalecek : No는 컴파일 오류입니다 – user176168