gpt4 book ai didi

c++ - 当将变量声明移动到接近首次使用时,它们是否在 return 语句之后有关系吗?

转载 作者:行者123 更新时间:2023-11-30 01:20:56 26 4
gpt4 key购买 nike

换句话说:就通过内存和/或速度(给定的理解力和可读性)的运行时性能而言,这两个代码块是相同的还是不同的?

A,接近首次使用时声明:

double A = /*...*/
double B = /*...*/

if(A > B) return false;

double C = /*...*/
double D = /*...*/

if(C < D) return false;

double E = /*...*/
double F = /*...*/

if(E > F) return false;

double G = /*...*/
double H = /*...*/

if(G < H) return false;

return true;

B、先声明所有变量:

double A = /*...*/
double B = /*...*/
double C = /*...*/
double D = /*...*/
double E = /*...*/
double F = /*...*/
double G = /*...*/
double H = /*...*/

if(A > B) return false;
if(C < D) return false;
if(E > F) return false;
if(G < H) return false;
return true;

最佳答案

对于现代编译器来说,这两种代码应该产生相同的目标代码。这些情况很容易根据基本的静态分析进行识别和优化,特别是 use-def analysisliveness analysis .

假设没有任何赋值涉及较早的变量,堆栈帧将只包含 2 个 double ,因为在任何时候只有 2 个 double 是活的。

当指针发挥作用时,由于潜在的别名,事情可能会发生巨大变化。如果使用不当,volatile 也会破坏优化。

关于c++ - 当将变量声明移动到接近首次使用时,它们是否在 return 语句之后有关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18710789/

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