Zis*_*Zis 1 c++ optimization gcc clang
例如,如果我有以下代码:
int main(){
myClass a(...);
a.doSomething();
if(...){
myClass c(...);
c.doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
像gcc或clang这样的通常编译器会优化这些变量的使用,发现"a"在它的生命周期中将不再使用,而不是为"c"重新分配空间,只需使用空间?如果这对于类不起作用,那么对于像double或size_t这样的"传统"类型是否有效?
我正在尝试最小化频繁调用函数的分配成本.但是在函数内部的某个地方,我觉得一些旧的变量已经没用了,但新变量不应该被称为该名称.编译器会直接重用变量给我,还是应该做类似的事情
myClass a(...);
something(a);
if(...){
#define c a
c=myClass(...);
something c;
#undef c
}
Run Code Online (Sandbox Code Playgroud)
通常,不允许编译器a在其作用域结束时重用,这是}函数末尾的结束括号.当析构函数执行某些特殊代码*时,此功能(在可预测的时间销毁对象)可以在C++中生成警卫.
我正在尝试最小化频繁调用函数的分配成本.
由于分配自动变量的成本几乎为零,因此大部分成本是在调用构造函数时.这不是你可以优化的东西.
*如果你的对象有简单的析构函数,编译器可以重用内存.这会节省你的记忆,而不是时间.
| 归档时间: |
|
| 查看次数: |
542 次 |
| 最近记录: |