• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-159  評論-223  文章-30  trackbacks-0
            周知內(nèi)聯(lián)是為了消除函數(shù)調(diào)用的代價,即四大指令序列:調(diào)用前序列、被調(diào)者起始序列、被調(diào)者收尾序列、返回后序列。它們通常對應(yīng)到體系結(jié)構(gòu)調(diào)用者保存/恢復(fù)寄存器集合與被調(diào)者保存/恢復(fù)寄存器集合之約束。這個本質(zhì)也是內(nèi)聯(lián)的前提。試問如果有某體系結(jié)構(gòu)比如S,它任意深度的函數(shù)調(diào)用代價幾乎為零,那么顯然內(nèi)聯(lián)是沒意義沒必要的。但是S可能存在嗎?我認(rèn)為不太可能。因為機(jī)器的資源比如寄存器集數(shù)量與堆棧空間是有限的,且調(diào)用需要知曉上下文,所以不能夠支持任意深度的調(diào)用,但是可以支持有限深度比如4層調(diào)用,這4層調(diào)用代價幾乎為零,假設(shè)再來一層,那么第5層調(diào)用代價就不為零了,這時如果內(nèi)聯(lián)第5層就變成4層調(diào)用,代價又幾乎為零。綜上所述,內(nèi)聯(lián)無論在何種體系結(jié)構(gòu),即使在一定深度內(nèi)沒意義也不會破壞性能。

            體系結(jié)構(gòu)直接影響程序性能。主要體現(xiàn)在指令集、寄存器、cache三塊。它們對于編譯器實現(xiàn)代碼優(yōu)化必須都考慮,尤其cache比如內(nèi)聯(lián)優(yōu)化、循環(huán)展開、基本塊布局、函數(shù)重排,如果不是因為有cache這玩意,內(nèi)聯(lián)優(yōu)化的復(fù)雜性會大為降低,因為不用考慮代碼膨脹引起的副作用即cache缺失,只要評估函數(shù)的指令數(shù)與動態(tài)執(zhí)行消耗的關(guān)系,指令數(shù)很少但執(zhí)行耗費很多時鐘周期的,則不宜內(nèi)聯(lián),尤其函數(shù)為非葉子結(jié)點;指令數(shù)很多但執(zhí)行耗費較少的,則可僅內(nèi)聯(lián)其中的快速路徑代碼。因現(xiàn)實存在cache這玩意,就必須權(quán)衡代碼膨脹帶來的副作用,是否能接受一定的膨脹,需要精確評估,構(gòu)建函數(shù)調(diào)用頻率與其靜態(tài)調(diào)用位置的矩陣,計算收益比如平均執(zhí)行一次的耗時是否減少,若收益為正且明顯則可內(nèi)聯(lián),否則不宜內(nèi)聯(lián)。

            有些編譯器為了簡單處理,不會內(nèi)聯(lián)帶靜態(tài)變量的函數(shù)哪怕指令數(shù)很少,或者內(nèi)聯(lián)不太正確比如LLVM(詳見下文)。其實單從技術(shù)上可以做到,不過要復(fù)雜些,復(fù)雜在于鏈接器的協(xié)作。為了保證函數(shù)級靜態(tài)變量的語義,編譯時要預(yù)留全局唯一標(biāo)志與構(gòu)造函數(shù)的占位符,在調(diào)用者體內(nèi)插入對全局唯一標(biāo)志的(位)判斷(標(biāo)志字的一位對應(yīng)一個靜態(tài)變量,表明是否已構(gòu)造或初始化賦值)、構(gòu)造函數(shù)調(diào)用/初始化賦值、置位標(biāo)志,而鏈接時要確定全局唯一標(biāo)志及構(gòu)造函數(shù)的地址。靜態(tài)變量、全局唯一標(biāo)志放于可執(zhí)行文件的數(shù)據(jù)區(qū),全局唯一構(gòu)造/初始化及析構(gòu)函數(shù)放于代碼區(qū),具體布局位置可以靈活,比如. data. static_obj,. text. obj. ctor/dtor。如果這種函數(shù)性能影響較大需要內(nèi)聯(lián)優(yōu)化,而編譯器不支持,有個替代的辦法是用全局變量或文件/類級別的靜態(tài)變量,輔以對應(yīng)標(biāo)志處理一次性構(gòu)造或初始化賦值(必要時將這處理封裝為一個函數(shù)以確保目標(biāo)函數(shù)被內(nèi)聯(lián)),可達(dá)到同樣效果不足之處是作用域擴(kuò)大了。

            關(guān)于LLVM對于帶靜態(tài)變量的函數(shù)之內(nèi)聯(lián)的測驗結(jié)果












            posted on 2023-11-16 23:32 春秋十二月 閱讀(252) 評論(0)  編輯 收藏 引用 所屬分類: Compiler
            国产精品久久影院| 99久久精品国产一区二区| 亚洲va国产va天堂va久久| 亚洲中文字幕伊人久久无码| 国产综合精品久久亚洲| a高清免费毛片久久| 国产精品久久久久久福利69堂| 老色鬼久久亚洲AV综合| 丰满少妇高潮惨叫久久久| AV无码久久久久不卡网站下载| 国产精品久久久亚洲| 精品亚洲综合久久中文字幕| 久久成人国产精品二三区| 久久国产精品成人免费| 狠狠人妻久久久久久综合| 久久久久亚洲AV成人网人人网站| 久久夜色撩人精品国产小说| 久久成人小视频| 久久久久人妻一区精品性色av| 精品人妻久久久久久888| 亚洲欧美精品伊人久久| 亚洲午夜久久久| 久久久久亚洲av无码专区| 色综合久久中文色婷婷| 麻豆av久久av盛宴av| www.久久99| 一本久久a久久精品综合香蕉| 久久精品人人做人人爽电影| 国产精品美女久久久久| 久久露脸国产精品| 久久亚洲私人国产精品| 国产精品综合久久第一页| 伊人久久大香线蕉av不卡| 久久香蕉综合色一综合色88| 超级97碰碰碰碰久久久久最新 | 久久精品无码专区免费东京热| 99久久超碰中文字幕伊人| 四虎亚洲国产成人久久精品| 久久婷婷五月综合国产尤物app| 久久久久亚洲AV无码永不| 伊人久久大香线蕉精品不卡|