在循环体内定义简单变量,和在循环体外定义简单变量效率是一样的.
因为简单变量并不存在创建和释放的过程,只是在栈上预留内存空间
见下例示范.
$ cat main.cpp
#include <stdio.h>
#include <string.h>
int main()
{
for(int i=0; i<5;i++)
{
char buf[256];
strcpy(buf,"abc");
printf("buf:%p\n",buf);
}
return 0;
}
./test
buf:0x7ffdc645e450
buf:0x7ffdc645e450
buf:0x7ffdc645e450
buf:0x7ffdc645e450
buf:0x7ffdc645e450
简单变量的分配只在栈上分配一次. 第二次并不会修改内存地址.
所有没有任何额外开销.
但是,如果循环体内是一个对象就不一样, 由于对象的生命周期所限,
它会有创建和释放的过程,循环时虽然对象地址没有改变,但会有额外的创建,释放过程
结果就会使得效率不一样.