请教循环内定义变量是否会增加存储空间
请问循环内定义变量是否会增加存储空间?
请问各位,如果我在循环内定义了变量,那么这个变量是不是在每次循环开始时申请一块内存,结束时又归还内存?这样做岂不是效率很低,编译器会不会帮我们自动优化?
------解决方案--------------------
不会影响效率的
建议看看 《深入c++对象模型》这本书
你就明白了
------解决方案--------------------
这取决于构造析构函数的代价有多大
对于内建类型,可以看成是无代价的
而用户定义类型则要具体看代码。
------解决方案--------------------
int main()
{
for(int i=0; i <10; i++)
{
int n = i;
//...(1)
}
int n;
for(int i=0; i <10; i++)
{
n = i;
//...(2)
}
for(int i=0; i <10; i++)
{
C c(i);
// ...(3)
}
C c;
for(int i=0; i <10; i++)
{
c = i;
// ...(4)
}
return 0;
}
这一段代码演示了对于内建类型和自定义类型分别在循环内外声明时的例子。
其中,(1)、(2)在优化后的效率完全相同
而(3) (4)的效率差别取决于构造函数比赋值的代价要大多少
至于变量占用空间,那是内外完全一致的。
PS:我的结论是对于相同的代码逻辑来说的,如果变量在循环内外定义执行的是不同的代码逻辑,则完全没有可比性。像下面这样的例子,(1)与(2)就是没有可比性的,但是(1)与(3)其效率与占用空间完全一致。
for(int i=0; i <10; i++)
{
C* pc = new C;
cout < < pc < < endl;// (1)
}
C* pc = new C;
for(int i=0; i <10; i++)
{
cout < < pc < < endl;// (2)
}
C* pc;
for(int i=0; i <10; i++)
{
pc = new C;
cout < < pc < < endl;// (3)
}
请问各位,如果我在循环内定义了变量,那么这个变量是不是在每次循环开始时申请一块内存,结束时又归还内存?这样做岂不是效率很低,编译器会不会帮我们自动优化?
------解决方案--------------------
不会影响效率的
建议看看 《深入c++对象模型》这本书
你就明白了
------解决方案--------------------
这取决于构造析构函数的代价有多大
对于内建类型,可以看成是无代价的
而用户定义类型则要具体看代码。
------解决方案--------------------
int main()
{
for(int i=0; i <10; i++)
{
int n = i;
//...(1)
}
int n;
for(int i=0; i <10; i++)
{
n = i;
//...(2)
}
for(int i=0; i <10; i++)
{
C c(i);
// ...(3)
}
C c;
for(int i=0; i <10; i++)
{
c = i;
// ...(4)
}
return 0;
}
这一段代码演示了对于内建类型和自定义类型分别在循环内外声明时的例子。
其中,(1)、(2)在优化后的效率完全相同
而(3) (4)的效率差别取决于构造函数比赋值的代价要大多少
至于变量占用空间,那是内外完全一致的。
PS:我的结论是对于相同的代码逻辑来说的,如果变量在循环内外定义执行的是不同的代码逻辑,则完全没有可比性。像下面这样的例子,(1)与(2)就是没有可比性的,但是(1)与(3)其效率与占用空间完全一致。
for(int i=0; i <10; i++)
{
C* pc = new C;
cout < < pc < < endl;// (1)
}
C* pc = new C;
for(int i=0; i <10; i++)
{
cout < < pc < < endl;// (2)
}
C* pc;
for(int i=0; i <10; i++)
{
pc = new C;
cout < < pc < < endl;// (3)
}