【发布时间】:2019-07-23 08:53:14
【问题描述】:
想象以下声明:
void foo(){
const std::array<int, 80000> arr = {/* a lot of different values*/};
//do stuff
}
还有第二个:
void foo(){
static const std::array<int, 80000> arr = {/* a lot of different values*/};
//do stuff
}
如果有的话,这两者之间可能存在哪些性能差异?这些解决方案是否存在任何危险?
【问题讨论】:
-
在
static的情况下,它们可能不在堆栈中,而是在只读部分中。可能也依赖于编译器。 -
出于好奇:您手头是否有真正的问题,或者这只是一个学术练习? (在这两种情况下都是一个有效的问题)
-
@user463035818 我正在代码审查期间进行讨论;)
-
取决于评论者,这可能是一个真正的问题:P
-
@Scheff
withoutStatic每次从静态数据 (.LC0) 调用时都会构建数组。withStatic使用一个数组,其结构已优化为常量 (withStatic()::arr)。