2

C で関数呼び出しのオーバーヘッドを概算しようとしています。そのため、GCC によって最適化されないように、属性((optimize("O0")))を持つ空の関数があります。

int __attribute__((optimize("O0"))) func(int a)
{
    return (a+a);
}

論文http://www.intel.com/content/www/us/en/embedded/training/ia-32-ia-64-benchmark-code-execution-paper.htmlに記載されている方法を使用し て判断しています時間なので、かなり正確です。

そのため、関数をループで複数回呼び出し、実行時間を測定します。

for (i = 0; i < 10; i++)
{
    t1 = start_timer();
    x = func(i);
    t2 = end_timer();

    time = t2 - t1;
}

関数が最初に呼び出されたとき (i=0)、後続の呼び出しよりも多くのサイクル (~10x) がかかることに気付きました。なぜこれが起こるのですか?

4

0 に答える 0