函数存储中的变量
variables in functions storage
当我在函数中声明一些变量,然后在循环中调用该函数时,这些变量是否在每一步都被销毁和重建?这很糟糕,可以/应该避免吗?下面是我正在做的一个例子:
void myfun(vector<double> &x){
vector<double>y;
y.resize(x.size());
//computation
}
int main(){
vector<double>x(3,0);
for(int i=0;i<5000;i++)
myfun(x);
}
是的,它们被销毁了。这还不错。
如果将static
限定符放在函数中的变量上,则它不会每次都被销毁。否则,情况会是这样,但这并不一定是坏事。不要对速度进行优化,直到你真正知道有问题并知道是什么原因造成的。
这取决于你用它做什么,有时它别无选择,只能这么做。我想说的是,如果它是可重用的,你可以在外部声明"内部声明"变量,并将其作为函数的引用参数传递。
当我在函数中声明一些变量,然后调用它时循环中的函数,变量是否被破坏和重建在每一步?
函数可以由编译器内联,变量可以被优化,还有各种不可预测的东西,但你可以假设它们在每次函数调用时都被初始化和销毁。
这很糟糕,可以/应该避免吗?
大多数情况下,这是不可避免的,但在处理向量时,如果可能的话,必须始终尽量减少这种情况。
C++标准提供了一种称为"好像"规则的东西,它基本上说编译器可以对代码做任何它想做的事情,前提是你不能分辨出其中的区别。如果编译器观察到跳过构造函数和析构函数调用不会改变程序的行为,那么它可能会跳过它,或者在函数之外声明变量,或者如果它不改变程序行为,则根本不声明变量。这取决于执行的质量。尽管我不确定是否有编译器应用了这样的优化。
static
,也可以将它们作为参数(通过引用或指针)传递。
相关文章:
- 为什么我可以将变量存储在不是其最小对齐方式的倍数的地址?
- 如何将变量存储为无
- 有没有办法强制C++编译器将变量存储在寄存器中?
- C++ - thread_local变量存储在哪里?
- 如何使用 c++ 将多个变量存储在一个变量中?例如,双精度 x,y,z 包含在可变点 p 中
- 如何将文件从文件作为变量存储
- 引用变量存储在哪里
- 尝试在C 程序中设置简单的键盘输入.使用变量存储True或false
- 如何将变量存储在另一个文件中
- 编译时局部变量存储在哪里
- lambda 捕获的变量存储在哪里
- 闭包捕获的变量存储在哪里?
- 静态和全局变量存储说明
- 模式名称,将值作为静态变量存储在函数中
- 任何人都能解释常量或常量变量存储在哪里吗
- 将变量存储在将被多次使用的函数中的最佳方式(c++)
- 如何将字符变量存储为二维字符变量
- 将环境变量存储在动态分配的数组中
- 从矢量中获取选定的数据,然后作为变量存储
- DLL的全局变量存储在内存中