虛函式效率低的原因

2021-06-12 05:25:36 字數 815 閱讀 4926

設想一下,如果說不是虛函式,那麼在編譯時期,其相對位址是確定的,編譯器可以直接生成jmp/invoke指令; 

如果是虛函式,多出來的一次查詢vtable所帶來的開銷,倒是次要的,關鍵在於,這個函式位址是動態的,譬如 

取到的位址在eax裡,則在call eax之後的

那些已經被預取進入流水線的所有指令都將失效。流水線越長,一次分支**失敗的代價也就越大。 

pf->test(); 

011e146d  mov        eax,dword ptr [pf] 

011e1470  mov        edx,dword ptr [eax] 

011e1472  mov        esi,esp 

011e1474  mov        ecx,dword ptr [pf] 

011e1477  mov        eax,dword ptr [edx] 

011e1479  call        eax  <------------------------- 分支**失效 

011e147b  cmp        esi,esp 

011e147d  call        @ilt+355(__rtc_checkesp) (11e1168h)    

此兄接著回答道「說到流水線,penalty基本上都是因為氣泡(也就是分支指令造成預取失效),知道這個以後碰到了就不會再卡殼了。雖然引入流水線(流水線其實是 risc最初使用的),極大提高了效率,流水線不是越長越好。像p4,幾十級流水線,頻率雖高,但是效能不好,很大原因就是因為流水線實在臭長。有興趣可 以去看看cpu怎麼做分支**,亂序執行的。」

oracle中rownum效率低的原因以及解決辦法

a低效率 select t.from select from get enter exam score t where signupyear 2013 and signupseason 春季 t where rownum 100 b高效率 select t.from select b.rownum ...

oracle中rownum效率低的原因以及解決辦法

a低效率 select t.from select from get enter exam score t where signupyear 2013 and signupseason 春季 t where rownum 100 b高效率 select t.from select b.rownum ...

盤點員工工作效率低的8大原因

一 流程不完善 二 制度不支援 三 監管不到位 四 技術不匹配 五 員工素質不高 六 主管能力有限 七 文化導向有誤 八 企業戰略有問題 一 流程不完善 流程是企業日常運營的基礎。乙個企業的效率低下,首先應檢查 企業的流程是否合理,是否簡潔和高效,能否有改進的地方,改進的可能性有多大。檢查流程,應首...