|
|
1
3
不,这是个很好的经验法则。但这只是一个经验法则。 最小化变量的作用域使编译器可以更自由地分配寄存器和进行其他优化,至少同样重要的是,它通常会生成更可读的代码。但它也依赖于重复的创造/破坏是廉价的,或者完全被优化掉。通常情况是这样……但并非总是如此。 正如你所发现的, 有时 这是个坏主意。 |
|
|
2
2
问题是堆活动。替换
|
|
|
3
2
对于内置类型(如int或double),这可能是正确的。 这里的问题是,您使用的是向量,它需要在进入循环体时运行构造函数,而在离开时运行析构函数。由于这两种方法都是非常重要的,所以编译器无法对它们进行优化,因为您的程序将不再正确。 举个相反的例子,想象一下如果使用一个文件对象而不是向量,这样的优化会做什么。 |
|
|
4
1
创造
如果你事先知道“局部”向量的大小,你也可以使用自动 数组 :
这样就可以降低分配空闲内存的成本。 |
|
|
5
1
第二种方法是分配新的内存(在您的情况下是1000*2000次)。每一个都是堆中一个全新的内存位置(尽管并不总是新的,但可以在同一个位置)。内存分配比修改已分配内存中包含的值花费的时间更长。 第一种方法是分配1个内存位置数组,只需修改其中的值。 如果编译器确实对此进行了优化(这并不总是如此),那么最好不要把它留给编译器,如果您可以选择自己作为程序员分配更少的内存(或更少的频率)。 |
|
6
0
obj的作用域将在循环中,因此一旦循环完成,就无法使用它。这是另外一个例子,对象被实例化,然后随着循环的进行而被销毁。最后,除了时间被浪费在构建和销毁对象上之外,什么都没有完成。 |
|
7
0
首先,你应该确保设计是好的,这意味着:
我认为在这种情况下,它确实意味着最好在循环中定义变量。 只有当您有实际的性能问题时,您才可以优化代码(如果编译器还没有为您这样做),例如将变量声明放在循环之外。 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |