小编Pro*_*eur的帖子

为什么我必须在g ++中启用优化才能进行简单的数组访问?

我用C++(gcc/Linux)中std::vectordoubles 编写了一个简单的高斯消元法.现在我已经看到运行时取决于编译器的优化级别(最多快5倍-O3).我写了一个小测试程序并收到了类似的结果.问题不在于矢量的分配,也没有任何调整大小等.

陈述这是一个简单的事实:

v[i] = x + y / z;
Run Code Online (Sandbox Code Playgroud)

(或类似的东西)没有优化就慢得多.我认为问题是索引运算符.如果没有编译器优化,std::vector它比raw更慢double *v,但是当我打开优化时,性能是相同的,令我惊讶的是,即使访问raw double *v也更快.

这种行为有解释吗?我真的不是一个专业的开发人员,但我认为编译器应该能够像上面那样直接将语句转移到硬件指令.为什么需要启用优化,更重要的是,优化的缺点是什么?(如果没有,我想知道为什么优化不是标准.)

这是我的矢量测试代码:

const long int count = 100000;
const double pi = 3.1416;
void C_array (long int size)
{
  long int start = time(0);
  double *x = (double*) malloc (size * sizeof(double));
  for (long int n = 0; n < count; n++)
    for (long int i = 0; i < size; i++)
      x[i] = i; …
Run Code Online (Sandbox Code Playgroud)

c c++ performance compiler-optimization

7
推荐指数
1
解决办法
646
查看次数

标签 统计

c ×1

c++ ×1

compiler-optimization ×1

performance ×1