作者ric2k1 (Ric)
看板EE_DSnP
标题Re: [请益] 宣告变数是否会花时间?
时间Wed Apr 16 22:19:10 2008
※ 引述《danielko (蛋尼尔糕)》之铭言:
: 我以前写for回圈的时候都是这样
: for(int i=0; i<Size; i++) {
: ...
: }
: 不过後来看到很多人都会把i, j等等counter在回圈外面宣告
: 例如
: int i, j, k;
: for(i=0; i<Size; i++)
: for(j=0; j<Size; j++)
: for(k=0; k<Size; k++)
: 这样看起来是只要一开始宣告i, j, k各一次就好了
这样子的 performance difference, 应该会是非常的 marginal,
所以不应该是考虑的重点.
很多书上会建议将 variables 宣告的 "as local as possible"
--- 虽然这样子有可能会影响到一点执行速率,
但是宣告成 local variable 有以下好处:
避免 data contamination. 比方说在你的例子里,
如果 i 被几个不同的 for 回圈共同使用, 或者是他被其他的 code 也用到,
那就有可能不小心将 i 的值弄烂掉.
换个角度想, 如果你觉得 i 应该就是给这个 for 回圈使用的, 那麽将它宣告成
local 那麽它就跟其他的 i 一点关系也没有了, 这样子的 code 会比较不容易出错.
: 我的问题是这样在执行上会比较快吗??
:另外一个好像也有点相关
:如果我在回圈里面宣告一个char []
:好像下次进来回圈的时候新宣告的也会在同一个记忆体位置耶
:这样好像里面的东西都还是跟离开回圈的时候一模一样
:等於说新宣告的其实不是乾净的?
不是很了解你 "不是很乾净" 的意思...
两次 for loop 时变数记忆体位置相同其实是很合理的,
因为 local variable 在离开 scope 时本来就会被 "release",
但是因为 for loop 又马上进来,
所以当然又是同样的记忆体位置又被 allocate 了一次...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.121.131.113
※ 编辑: ric2k1 来自: 59.121.131.113 (04/16 22:23)
1F:推 danielko:所以如果new马上delete再new 里面的内容也相同吗? 04/17 00:08
2F:推 timrau:难讲 特别是如果有constructor介入的话就更不用说了 04/17 01:26