gpt4 book ai didi

C++ 局部变量和寄存器

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:47:45 24 4
gpt4 key购买 nike

我经常看到编译器将局部函数变量放在寄存器中。我对此有疑问。

如果我大量使用某些类成员变量(整数/指针等...),将其临时复制到局部变量,使用它,然后将结果复制到类成员是否有意义?

例如(单向填充 ptr 列表):

struct MyClass{

struct ObjectHolder{
ObjectHolder* next_free;
};
ObjectHolder *next_free = nullptr;

void fill(){
ObjectHolder *copy_of_free = next_free ; // copy to register?

for (int i = 0; i < capacity; ++i) {
ObjectHolder &obj = array[i];

// build chain of pointers
obj.next_free = copy_of_free;
copy_of_free = &obj;
}

next_free = copy_of_free; // back to memory
}
}

最佳答案

您在代码中描述的不仅仅是将成员变量复制到局部变量以启用寄存器放置。从本质上讲,您的问题说明了两种方法之间的区别:

  1. 在将结果写入成员变量之前在本地完全计算结果,对比
  2. 在进行计算时将中间结果写入成员变量。

您的程序遵循方法 #1。它比 #2 更健壮,因为对象在执行计算时保持一致状态。

方法 #1 也可以为编译器提供更多优化代码的机会。但是,这是次要影响;您的对象在计算过程中保持一致更为重要。

关于C++ 局部变量和寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24701299/

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