堆栈分配与堆分配

时间:2010-11-07 05:52:29

标签: c++ stack performance heap

  

可能重复:
  C++ Which is faster: Stack allocation or Heap allocation

我正在使用和不使用TEST测试以下代码:

#include <cstdlib> // atoi

int main( int argc, char *argv[ ] ) {
    int times = 100000000;

    switch ( argc ) {
        case 2:
          times = atoi( argv[1] );
    } // switch

    volatile int *arr = 0;
    delete arr;

    for ( int i = 0; i < times; i += 1 ) {
    #ifdef TEST
        arr = new int[10];
        arr[0] = 5;
        delete [ ] arr;
    #else
        volatile int arr[10];
        arr[0] = 5;
    #endif
    }
}

以下是我的时间输出:

$ time ./q1test    // variable TEST defined  
real   0m7.319s  
user   0m7.289s  
sys    0m0.007s  

$ time ./q1notest  // variable TEST not defined  
real   0m0.281s  
user   0m0.276s  
sys    0m0.003s  

$ time ./q1dynopt  // variable TEST defined with compiler optimization
real   0m7.137s  
user   0m7.116s  
sys    0m0.006s  

$ time ./q1nodynopt // variable TEST not defined with compiler optimization
real   0m0.053s  
user   0m0.048s  
sys    0m0.003s  

我想知道为什么第一种情况比第二种情况慢得多? 另外,为什么编译器优化不影响第一种情况?

我知道它是由于堆栈分配与堆分配有关,但如果可能,我想更深入地理解它。

0 个答案:

没有答案