我在C ++中运行一个简单的无限循环:
int main() {
for (;;) {}
}
当我编译并运行它时,程序会消耗100%的CPU。为什么会这样?我在Macbook Pro上使用g ++ 4.7。
答案 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