虚拟方法优化
Virtual methods Optimization
假设我有一个像这样的 class:
class MyClass{
int somedata;
public:
virtual void DoSomething() { /*do something here*/}
};
然后我再也没有从这个 class 中得出结论。我意识到,如果编译器完全按照代码编写的方式编写程序集,那么每个 MyClass
实例都会因为虚函数而增加数据大小......
优化器优化 class 这样的东西是否符合标准:
class MyClass{
int somedata;
public:
void DoSomething() { /*do something here*/} //Note absence of virtual
};
如果是符合标准的优化,有编译器会这样做吗?
只要不影响代码的预期行为(例如您引用的示例),编译器和链接器就可以随心所欲地执行任何操作,这是符合标准的。
我清楚地记得浏览最近的 gcc
发行说明时特别提到,在与链接器的合作下,它确实做到了这一点。
你应该使用C++11标准中引入的final关键字。
Class My class {
Public:
Void doSomething () final;
}
假设我有一个像这样的 class:
class MyClass{
int somedata;
public:
virtual void DoSomething() { /*do something here*/}
};
然后我再也没有从这个 class 中得出结论。我意识到,如果编译器完全按照代码编写的方式编写程序集,那么每个 MyClass
实例都会因为虚函数而增加数据大小......
优化器优化 class 这样的东西是否符合标准:
class MyClass{
int somedata;
public:
void DoSomething() { /*do something here*/} //Note absence of virtual
};
如果是符合标准的优化,有编译器会这样做吗?
只要不影响代码的预期行为(例如您引用的示例),编译器和链接器就可以随心所欲地执行任何操作,这是符合标准的。
我清楚地记得浏览最近的 gcc
发行说明时特别提到,在与链接器的合作下,它确实做到了这一点。
你应该使用C++11标准中引入的final关键字。
Class My class {
Public:
Void doSomething () final;
}