静态,常量和全局变量的性能提升

我们都疯了

是否有可能通过声明一个变量在C获得性能++ staticconst或使其global

迪特玛·库尔(DietmarKühl)

除非将内置变量的局部变量放在其他地方,否则您不太可能胜过内置类型的函数局部变量:如果可以在编译时计算变量的值,则使其constexpr成为理想选择。

  • static确定该对象是否已初始化的函数的每次调用中,使用该变量可能会产生少量开销,尤其是对于C ++ 11而言,该初始化是线程安全的。即使不需要检查,堆栈也可能位于高速缓存的内存中,而static变量则不需要。
  • 将变量设置为全局变量将增加其不在缓存内存中的机会,即,很有可能使其变慢(除了不利的其他潜力,例如使其成为引入数据竞争的良好候选者)。
  • const如果编译器可以将值计算为编译时间,则创建变量可能会有所帮助。

如果变量具有非平凡类型,那么事情会变得更加有趣,因为例如a的初始化成本std::vector<T>是非平凡的。static与全局对象相比,我不希望使对象在局部功能上有所区别(即,我不会将它们全局化;总之没有空间容纳全局对象)。但是,制作对象static可能会导致线程之间共享对象如果这是一个问题,那么增加的锁定和序列化可能会抵消任何潜在的节省,并且使用基于堆栈的内存使用分配器是降低成本的更好方法(假设它们足够小,可以合理地在堆栈上使用)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

常量和全局变量之间的区别

来自分类Dev

静态和全局变量存储说明

来自分类Dev

更改常量全局变量

来自分类Dev

静态变量和全局变量之间的区别

来自分类Dev

JavaScript性能-全局变量

来自分类Dev

如何在MATLAB中声明静态和全局变量

来自分类Dev

常量变量和非常量全局变量之间的类型推断有何不同?

来自分类Dev

常量变量和非常量全局变量之间的类型推断有何不同?

来自分类Dev

全局和静态全局变量的外部

来自分类Dev

静态全局变量与全局变量C

来自分类Dev

React Native中的全局变量/常量

来自分类Dev

非静态全局变量与全局静态__thread变量

来自分类Dev

MPI和全局变量

来自分类Dev

数组和全局变量

来自分类Dev

全局变量和innerHTML

来自分类Dev

静态全局变量的奇怪行为

来自分类Dev

C ++类中的静态全局变量

来自分类Dev

汇编:静态/全局变量的位置

来自分类Dev

使用全局变量和常量是否是一种好习惯?(迅速5)

来自分类Dev

如何消除具有相同名称的局部静态变量和全局变量的歧义

来自分类Dev

局部变量和全局变量

来自分类Dev

在同一DLL实例之间共享静态和全局变量

来自分类Dev

如何通过静态库(macOS)在主进程和动态库之间共享全局变量?

来自分类Dev

全局变量或PHP中的传递变量?(性能)

来自分类Dev

使自定义结构类型的常量全局变量

来自分类Dev

用全局变量初始化常量

来自分类Dev

从命令行读取常量作为全局变量

来自分类Dev

编辑全局变量并返回它(或静态变量)

来自分类Dev

在递归函数中用静态变量替换全局变量