3

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

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

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

4

2 回答 2

11

CPU 尽可能快地运行给定的代码。如果没有其他有趣的事情发生,操作系统将尽可能多地为需要它的进程提供 CPU 时间。如果您要同时运行其中两个进程,它们将分别获得大约 50% 的 CPU 时间。(请注意,如果您有多个内核,用于描述 CPU 使用率的术语会有点模糊,就像几乎所有现代 CPU 一样。如果您有一个四核系统,上述循环将占用一个内核的 100%,即 25 % 全面的。)

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

于 2012-08-26T23:38:43.420 回答
1

如果您快速浏览一下程序集,您会看到:

.L2:
    jmp     .L2
    .cfi_endproc

所以编译器生成了一个跳转指令。CPU 只是按照它的指示去做:跳来跳去。您可能会问为什么编译器会生成此代码。

复制:

gcc -S test.c -o test.s; more test.s
于 2012-08-27T18:00:22.787 回答