gpt4 book ai didi

c++ - 编译器会优化和重用变量吗

转载 作者:行者123 更新时间:2023-11-30 01:09:39 31 4
gpt4 key购买 nike

例如,如果我有以下代码:

int main(){
myClass a(...);
a.doSomething();
if(...){
myClass c(...);
c.doSomething();
}
}

gcc 或 clang 等常用编译器是否会通过发现“a”在其生命周期内不再使用而只使用 a 的空间而不是为“c”重新分配空间来优化这些变量的使用?如果这对 class 不起作用,那么它是否适用于“传统”类型,如 double 或 size_t?

我正在尝试将经常调用的函数的分配成本降至最低。但是在函数内部的某个地方,我觉得一些旧变量已经没用了,但新变量不应该被称为那个名字。编译器会直接为我重用变量还是我应该做类似的事情

myClass a(...);
something(a);
if(...){
#define c a
c=myClass(...);
something c;
#undef c
}

最佳答案

通常,编译器不允许重用 a 直到其作用域结束,即函数末尾的右大括号 }。当析构函数执行某些特殊代码时,此功能(在可预测的时间销毁对象)可以在 C++ 中创建守卫*

I'm trying to minimize the allocation cost of a frequently called function.

由于分配自动变量几乎没有成本,所以大部分成本都在调用构造函数上。这不是您可以优化掉的东西。

* 如果您的对象具有平凡的析构函数,编译器可以重用内存。这会节省您的内存,而不是时间。

关于c++ - 编译器会优化和重用变量吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39904905/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com