如何告诉编译器不优化某些代码? [英] How to tell compiler to NOT optimize certain code away?

查看:337
本文介绍了如何告诉编译器不优化某些代码?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有办法告诉编译器(我的情况下是g ++)优化某些代码,即使该代码不可达?我只需要在对象文件中的那些符号。



示例:这里是一个简单的函数,我希望这个函数被编译,即使它从未调用。 / p>

  void foo(){
Foo< int& v;
}

如果没有官方编译器指令,认为它是一个重要的功能?或者至少让它认为它不能安全地被忽略?我尝试这样的:

  extern bool bar; 
void foo(){
if(bar){
Foo< int> v;
}
}

但似乎没有。 / p>

(如果你真的想知道为什么我在地球上会想要 - 它与这个问题,其中,而不是显式的模板实例化与模板类Foo< int> 我只想写 Foo< int> v ,因为在许多情况下,这更容易,因为它隐式实例化所有需要的函数,没有优化的调试模式...)



UPDATE:



我想做(作为一个可编译的微型示例):



foo.h (这样的文件给我, p>

 模板< class T> 
struct Foo {
T val_;
Foo(T val):val_(val){
//重码,长编译时间
}
};

foo-instantiation.cpp

  #includefoo.h
void neverCalled(){
Foo< int& f(1);
}

//实例化的标准方法是:
// template class Foo< int>
//但在现实中,通常很难找出
//正确的是我要声明什么类型。
//用法如Foo< int> f(1);将实例化所有
//依赖类型。

foo-decl.h h)

 模板< class T& 
struct Foo {
T val_;
Foo(T val); //没有重的代码,可以包括任何地方并编译快速
};

main.cpp

  #include< iostream> 
#includefoo-decl.h

int main(int argc,char ** argv){
Foo< int> foo(1);
return 0;
}

编译(无优化)

  g ++ -c main.cpp 
g ++ -c foo-instantiation.cpp
g ++ main.o foo-instantiation。 oo

编译(优化)

  g ++ -O2 -c main.cpp 
g ++ -O2 -c foo-instantiation.cpp
g ++ main.o foo-instantiation.oo
main.o(.text + 0x13):在main函数中:
:未定义引用`Foo< int> :: Foo(int)'
collect2:ld返回1 exit status



查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆