簡體   English   中英

const int&performance issue

[英]const int& performance issue

我曾經問過一個關於stackoverflow的問題(如果你對此感興趣的話是鏈接: 通過引用傳遞“高級”概念?

有趣的是,其中一個答案引起了我的興趣,我覺得它值得一個單獨的問題。

const int& x = 40;

如果40恰好是CPU緩存中的值(rvalue)。 那么,通過編寫該行,您是否只需保留緩存以在流程的生命周期內保存數字40? 這不是一件壞事嗎?

謝謝

文字40幾乎肯定存在於一些只讀存儲器中,可能存在於匯編程序中(對於較小的值,通常有指令可以設置寄存器或地址;對於較大的值,它將生活在某個地方作為常量)。 它不會“存在於緩存中”。 當你創建一個const引用時,在編譯器認為適合的任何地方構造一個臨時值來保存臨時值(可能在堆棧上)。 它是否存在於任何緩存中取決於系統。

如果從未采用此臨時地址,則實際上甚至可能不會創建:C ++標准中的所有規則都由“as if”-rule控制。 結果,參考和文字將是相同的。 如果采用const引用的地址,編譯器需要決定放置對象的位置,實際上,您可能會看到一個小的性能影響。

您無法從程序中預留緩存空間

它並不是你真正掌控的。 緩存控制決策由其自己的控制器決定,該控制器研究時間和空間位置 ,以及決定要替換哪些緩存行以及要保留哪些緩存行。

通常有多個數據副本 ,在不同的緩存和虛擬內存地址空間(映射到物理內存+交換)。


管理內存的方式要復雜得多。 在處理內存時,系統每次都會生成一個虛擬地址。

該虛擬地址被轉換為物理地址。 這種轉換可以在緩存,物理內存等上產生地址。它不一定映射到一塊內存。 如果它已被換出,則會導致頁面錯誤,並且該頁面將加載到內存中(多個級別)。

緩存管理等低級操作不受此級別決策的影響

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM