設想一下,如果說不是虛函式,那麼在編譯時期,其相對位址是確定的,編譯器可以直接生成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大原因
一 流程不完善 二 制度不支援 三 監管不到位 四 技術不匹配 五 員工素質不高 六 主管能力有限 七 文化導向有誤 八 企業戰略有問題 一 流程不完善 流程是企業日常運營的基礎。乙個企業的效率低下,首先應檢查 企業的流程是否合理,是否簡潔和高效,能否有改進的地方,改進的可能性有多大。檢查流程,應首...