为什么空的无限循环使用我的整个CPU?

时间:2012-08-26 23:36:01

标签: c++ performance

我在C ++中运行一个简单的无限循环:

int main() {
  for (;;) {}
}

当我编译并运行它时,程序会消耗100%的CPU。为什么会这样?我在Macbook Pro上使用g ++ 4.7。

2 个答案:

答案 0 :(得分:10)

CPU尽可能快地运行给出的代码。如果没有其他感兴趣的内容,操作系统将尽可能多地为想要它的进程提供CPU时间。如果您同时运行两个这些进程,它们每个将获得大约50%的CPU时间。 (请注意,如果您有多个核心,用于描述CPU使用率的术语会有点模糊,就像几乎所有现代CPU一样。如果您有四核系统,上述循环将占用一个核心的100%,或25整体而言。)

不执行I / O(或以其他方式等待任何外部操作)的计算绑定程序都以相同的方式运行。

答案 1 :(得分:1)

如果你快速查看装配,你会看到:

.L2:
    jmp     .L2
    .cfi_endproc

因此编译器生成了一个跳转指令。 CPU只按照指示行事:跳转。 你可以问为什么编译器生成了这段代码。

摄制:

gcc -S test.c -o test.s; more test.s