我在 C++ 中运行一个简单的无限循环:
int main() {
for (;;) {}
}
当我编译并运行它时,程序消耗了我 100% 的 CPU。为什么会这样?我在 Macbook Pro 上使用 g++ 4.7。
我在 C++ 中运行一个简单的无限循环:
int main() {
for (;;) {}
}
当我编译并运行它时,程序消耗了我 100% 的 CPU。为什么会这样?我在 Macbook Pro 上使用 g++ 4.7。
CPU 尽可能快地运行给定的代码。如果没有其他有趣的事情发生,操作系统将尽可能多地为需要它的进程提供 CPU 时间。如果您要同时运行其中两个进程,它们将分别获得大约 50% 的 CPU 时间。(请注意,如果您有多个内核,用于描述 CPU 使用率的术语会有点模糊,就像几乎所有现代 CPU 一样。如果您有一个四核系统,上述循环将占用一个内核的 100%,即 25 % 全面的。)
不执行 I/O(或以其他方式等待任何外部操作)的计算绑定程序都以相同的方式运行。
如果您快速浏览一下程序集,您会看到:
.L2:
jmp .L2
.cfi_endproc
所以编译器生成了一个跳转指令。CPU 只是按照它的指示去做:跳来跳去。您可能会问为什么编译器会生成此代码。
复制:
gcc -S test.c -o test.s; more test.s