亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

seo常用優(yōu)化技巧 網(wǎng)站代碼優(yōu)化工具( 五 )


《C++ Primer》實現(xiàn)了一個CachedObj類模板,任何需要擁有這種cached能力的類型都可以通過從CachedObj<T>派生而獲得 。
它的主要思想是為該種類型維護(hù)一個FreeList,每個節(jié)點就是一個Object,對象申請的時候,檢查FreeList,如果FreeList不為空,則摘除頭結(jié)點返回,如果FreeList為空,則new一批Object并串到FreeList,然后走FreeList不為空的分配流程,通過重載類的operator new和operator delete,達(dá)到對類的使用者透明的目的 。
(c)內(nèi)存分配和對象構(gòu)建分離
c的malloc用來動態(tài)分配內(nèi)存,free用來歸還內(nèi)存;C++的new做了3件事,通過operator new(本質(zhì)上等同malloc)分配內(nèi)存,在分配的內(nèi)存上構(gòu)建對象,返回對象指針;而delete干了兩件事,調(diào)用析構(gòu)函數(shù),歸還內(nèi)存 。
C++通過placement new可以分離內(nèi)存分配和對象構(gòu)建,結(jié)合顯示的析構(gòu)函數(shù)調(diào)用,達(dá)到自控的目的 。
我優(yōu)化過一個游戲項目,啟動時間過長,記憶中需要幾十秒(至少十幾秒),分析后發(fā)現(xiàn)主要是因為游戲執(zhí)行預(yù)分配策略(對象池),在啟動的時候按最大容量創(chuàng)建怪和玩家,對象構(gòu)建很重,大量對象構(gòu)建耗時過長,通過分離內(nèi)存分配和對象構(gòu)建,把對象構(gòu)建推遲到真正需要的時候,實現(xiàn)了服務(wù)的重啟秒起 。
(d)內(nèi)存復(fù)用
編解碼、加解密、序列化反序列化(marshal/unmarshal)的時候一般都需要動態(tài)申請內(nèi)存,這種調(diào)用頻次很高,可以考慮用靜態(tài)內(nèi)存,為了避免多線程競爭,可以用thread local 。
當(dāng)然你也可以改進(jìn)靜態(tài)內(nèi)存策略,比如封裝一個GetEncodeMemeory(size_t)函數(shù),維護(hù)一個void* + size_t結(jié)構(gòu)體對象(初始化為NULL+0),對比參數(shù)size跟對象的size成員,如果參數(shù)size<=對象size,直接返回對象大的void*指針,否則free掉void*指針,再按參數(shù)size分配一個更大的void*,并用參數(shù)size更新對象size 。
### cache優(yōu)化
i-cache優(yōu)化:i-cache的優(yōu)化可以通過精簡code path,簡化調(diào)用關(guān)系,減少代碼量,減少復(fù)雜度來實現(xiàn) 。
具體措施包括,減少函數(shù)調(diào)用(就地展開、inline),利用分支預(yù)測,減少函數(shù)指針,可以考慮把code path上相關(guān)的函數(shù)定義在一起,把相關(guān)的函數(shù)定義到一個源文件,并讓它們在源文件上臨近,這樣生成的object文件,在運(yùn)行時加載后相關(guān)函數(shù)大概率也內(nèi)存臨近,當(dāng)然編譯器也一直在做這方面的努力,但我們寫代碼不應(yīng)該依賴編譯器優(yōu)化,盡量去幫助編譯器生成更高效的代碼 。
d-cache優(yōu)化:d-cache優(yōu)化包括改進(jìn)數(shù)據(jù)結(jié)構(gòu)和算法獲取更好的數(shù)據(jù)訪問時空局部性,比如二分查找就是d-cache友好算法 。一個cache line一般是64B,如果數(shù)據(jù)跨越兩個cache-line,則會導(dǎo)致load & store2次,所以,需要結(jié)合cache對齊,盡量讓相關(guān)訪問的數(shù)據(jù)在一個cache-line 。
如果結(jié)構(gòu)體過大,則各成員不僅可能在不同cache-line,甚至可能在不同page,所以應(yīng)該避免結(jié)構(gòu)體過大 。
如果結(jié)構(gòu)體的成員變量過多,一般而言對各成員的訪問頻次也會滿足2-8定律,可以考慮把hot和cold的成員分開,重排結(jié)構(gòu)體成員變量順序,但這些騷操作我不建議在開始的時候用,因為說不定哪天又要增刪成員,從而破壞苦心孤詣搭建的積木 。
### 判斷前置
判斷前置指在函數(shù)中講判斷返回的語句前置,這樣不至于忙活半天,你跟我說對不起不合適,要杜絕這種騙pao的做法 。
在寫多個判斷的時候,把不滿足可能性高的放在前面 。
在寫條件或的時候把為true的放在前面,在寫條件與的時候把為false的放在前面 。
另外,如果在循環(huán)里調(diào)用一個函數(shù),而這個函數(shù)里檢查某條件,不符合就返回,這種情況,可以考慮把檢查放到調(diào)用函數(shù)的外面,這樣不滿足的話就不用陷入函數(shù),當(dāng)然,你也可以說,這樣的操作違背軟件工程,但看你想要什么,你不總是能夠兩全其美,對吧?


以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!

「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助: