由於在while()主體中不顯示依賴關係,所以gcc爲這段代碼生成一個空的三字符。現在,取決於你實際使用的標準標誌(同樣,如果在* nix環境中,檢查env。變量CFLAGS和CXXFLAGS),編譯器不會生成asm「hogging」代碼。
只要在做了g++ -S source.cpp
source.s文件(包含ASM代碼)後檢查,如果循環已經產生或沒有。
這裏是我與G無優化標誌輸出++(GCC)4.5.0 20090910(實驗):
.text
.globl _main
_main:
LFB0:
pushq %rbp
LCFI0:
movq %rsp, %rbp
LCFI1:
L2:
jmp L2
LFE0:
.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
EH_frame1:
.set L$set$0,LECIE1-LSCIE1
.long L$set$0
LSCIE1:
.long 0x0
.byte 0x1
.ascii "zPR\0"
.byte 0x1
.byte 0x78
.byte 0x10
.byte 0x6
.byte 0x9b
.long [email protected]
.byte 0x10
.byte 0xc
.byte 0x7
.byte 0x8
.byte 0x90
.byte 0x1
.align 3
LECIE1:
.globl _main.eh
_main.eh:
LSFDE1:
.set L$set$1,LEFDE1-LASFDE1
.long L$set$1
LASFDE1:
.long LASFDE1-EH_frame1
.quad LFB0-.
.set L$set$2,LFE0-LFB0
.quad L$set$2
.byte 0x0
.byte 0x4
.set L$set$3,LCFI0-LFB0
.long L$set$3
.byte 0xe
.byte 0x10
.byte 0x86
.byte 0x2
.byte 0x4
.set L$set$4,LCFI1-LCFI0
.long L$set$4
.byte 0xd
.byte 0x6
.align 3
LEFDE1:
.constructor
.destructor
.align 1
.subsections_via_symbols
此代碼豬我的CPU如預期(在Mac OSX 10.6.1)。
你正在使用什麼優化級別? (「-O」,「-O2」,「-O3」?) – 2009-09-29 20:56:26
帶編譯器標誌的後置代碼示例。 – Steven 2009-09-29 20:56:29
你如何測量CPU使用率? – derobert 2009-10-01 06:31:27