我应该减少设置变量吗
Should I reduce set variable
我有2个C++代码:
代码 1:减少赋值变量
While(alive)
{
if(health < healthMax) health = healthMax;
}
代码2:不减少赋值变量
While(alive)
{
health = healthMax;
}
我不知道set和get是怎么工作的,但我个人认为set会change/write内存中的数据,而get只读取内存,所以最好get和reduce set - 这就是为什么我现在更喜欢Code 1。我觉得对吗?
感谢您的阅读:)
没有。该赋值有望编译为寄存器之间的移动,这比条件分支更便宜。
如果 health
是全局的,您可能希望在循环之外手动将商店下沉到全局,但即使是每次迭代的商店也不错。重复存储到同一内存位置的成本很低,因为它们会命中 L1 缓存。您可以期望每个时钟的吞吐量约为 1,而不会占用其他内核的内存带宽。
由于您将此标记为 assembly
,请参阅 x86 标记 wiki 以获取指向该平台性能详细信息的链接,尤其是 Agner Fog 的内容。很多概念对于其他架构都是相似的。
我有2个C++代码:
代码 1:减少赋值变量
While(alive)
{
if(health < healthMax) health = healthMax;
}
代码2:不减少赋值变量
While(alive)
{
health = healthMax;
}
我不知道set和get是怎么工作的,但我个人认为set会change/write内存中的数据,而get只读取内存,所以最好get和reduce set - 这就是为什么我现在更喜欢Code 1。我觉得对吗?
感谢您的阅读:)
没有。该赋值有望编译为寄存器之间的移动,这比条件分支更便宜。
如果 health
是全局的,您可能希望在循环之外手动将商店下沉到全局,但即使是每次迭代的商店也不错。重复存储到同一内存位置的成本很低,因为它们会命中 L1 缓存。您可以期望每个时钟的吞吐量约为 1,而不会占用其他内核的内存带宽。
由于您将此标记为 assembly
,请参阅 x86 标记 wiki 以获取指向该平台性能详细信息的链接,尤其是 Agner Fog 的内容。很多概念对于其他架构都是相似的。