对于编程问题,我是 C 和 stackoverflow 的新手。我已经对我的问题进行了一些谷歌搜索,但无法找到直接解决该问题的信息。但是,我也可能对这个主题太陌生,以至于我不确定哪些术语适合搜索。如果这是一个常见问题,我深表歉意。
我的程序正在执行科学计算。特别是,它主要涉及获取给定的坐标和给定的力,并根据一系列计算更新所有内容。为了得到结果,我对每件事都进行了大约一百万次,所以我很关心如何让它尽可能高效。特别是我发现我有 3 种类型的变量
- 不变的变量
- 在迭代之间变化的临时变量 并且只是在计算中用作占位符
- 每次迭代都会更改然后继续执行的数据 下一个
声明这些不同变量的最有效方法是什么?出于天真,我很想将所有内容都声明为全局变量,我很确定这对类型 (1) 和 (3) 的变量有意义。但是对于类型 (2) 我不确定。如果我调用一个函数一百万次,并且每次调用它时都会初始化一个临时变量,这是否比我拥有一个它会更改的全局临时值浪费更多时间?
最佳答案
If I call a function a million times and every time it is called in initializes a temporary variable, does this waste more time than if I have a global temp value that it alters instead?
不,甚至有可能恰恰相反。在堆栈上创建一个临时变量。
分配堆栈变量没有性能成本
当函数被调用时,堆栈指针无论如何都必须移动,以便为函数参数和其他东西腾出空间。现在,如果必须分配一个额外的变量,所要做的就是增加堆栈指针移动的量。
与 Java 不同,您可以让变量保持未初始化状态,并在需要时直接存储最终值,这样就没有初始化成本。
Locality of reference
当您使用堆栈变量时也更好。这意味着函数使用的值彼此更接近,这有助于处理器更有效地缓存数据。缓存通常按 64 字节的行组织,这意味着彼此相邻的两个 32 位值比两个分散的值更有效。
发生分页时,空间局部性尤为重要,因为从永久存储加载页面会巨大性能成本。因此,最好将特定时间所需的所有变量存储在一起,以便它们适合一页。
关于c++ - 有效地处理调用一百万次的 C/C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29808488/