• <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>
            隨筆-162  評論-223  文章-30  trackbacks-0
            周知內聯是為了消除函數調用的代價,即四大指令序列:調用前序列、被調者起始序列、被調者收尾序列、返回后序列。它們通常對應到體系結構調用者保存/恢復寄存器集合與被調者保存/恢復寄存器集合之約束。這個本質也是內聯的前提。試問如果有某體系結構比如S,它任意深度的函數調用代價幾乎為零,那么顯然內聯是沒意義沒必要的。但是S可能存在嗎?我認為不太可能。因為機器的資源比如寄存器集數量與堆棧空間是有限的,且調用需要知曉上下文,所以不能夠支持任意深度的調用,但是可以支持有限深度比如4層調用,這4層調用代價幾乎為零,假設再來一層,那么第5層調用代價就不為零了,這時如果內聯第5層就變成4層調用,代價又幾乎為零。綜上所述,內聯無論在何種體系結構,即使在一定深度內沒意義也不會破壞性能。

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

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

            關于LLVM對于帶靜態變量的函數之內聯的測驗結果












            posted on 2023-11-16 23:32 春秋十二月 閱讀(274) 評論(0)  編輯 收藏 引用 所屬分類: Compiler
            色欲综合久久躁天天躁蜜桃| 久久精品一区二区| 国产精品久久久久久久久久影院| 久久人人添人人爽添人人片牛牛| 亚洲国产另类久久久精品黑人| 精品久久久久久无码中文字幕一区| 亚洲国产成人久久精品动漫| 中文字幕精品无码久久久久久3D日动漫 | 欧洲人妻丰满av无码久久不卡| 7777久久亚洲中文字幕| 久久午夜福利电影| 久久av无码专区亚洲av桃花岛| 久久精品无码av| 97久久精品午夜一区二区| 国产成人精品三上悠亚久久| 久久精品亚洲精品国产欧美| 精品久久久久久久无码| 无码国产69精品久久久久网站| 久久久久亚洲精品男人的天堂| 久久91精品国产91久久户| 无码AV波多野结衣久久| 亚洲一级Av无码毛片久久精品| 久久91精品久久91综合| 精品久久久无码人妻中文字幕豆芽 | 久久婷婷人人澡人人爽人人爱| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 久久精品一本到99热免费| 久久这里都是精品| 久久精品女人天堂AV麻| 国产精品99久久不卡| 99国产精品久久| 韩国三级大全久久网站| 久久久久人妻一区二区三区vr| 狠狠色丁香婷婷久久综合| 欧美激情一区二区久久久| 久久亚洲熟女cc98cm| 中文字幕热久久久久久久| 无码人妻精品一区二区三区久久| 久久99久国产麻精品66| 久久人人爽人人爽人人片AV不| 97久久精品无码一区二区天美|