Swift編譯器優(yōu)化(1)泛型特化

如下泛型函數(shù):
func min<T: Comparable>(x: T, y: T) -> T {
return y < x ? y : x
}

編譯器會插入如下代碼來支持泛型:
func min<T: Comparable>(x: T, y: T, FTable: FunctionTable) -> T {
let xCopy = FTable.copy(x)
let yCopy = FTable.copy(y)
let m = FTable.lessThan(yCopy, xCopy) ? y : x
FTable.release(x)
FTable.release(y)
return m
}

這樣會增加很多的開銷佛玄,特別是在大量操作的情況下,比如在for循環(huán)內(nèi)執(zhí)行泛型函數(shù)冒萄。
但是編譯器會根據(jù)上下文信息進(jìn)行優(yōu)化幻梯,對泛型函數(shù)進(jìn)行特化单绑,如下:
func foo() {
let x :Int = …
let y: Int = …
let r = min(x, y)
}
在這個函數(shù)內(nèi),其實(shí)編譯器可以通過上下文信息知道x,y的類型從而進(jìn)行編譯優(yōu)化:
func min<Int>(x: Int, y: Int) -> Int {
return y < x ? y : x
}
這樣就減少了大部分的泛型調(diào)用開銷。
但是由于編譯器的局限性彭雾,如果函數(shù)foo() 和 min(x,y)分別定義在不同的文件內(nèi),而編譯器是并行分析編譯文件串稀,從而min(x,y)在編譯的時候并沒有相關(guān)的上下文信息除抛,只能用完整的泛型調(diào)用來編譯。
不過母截,新版本的Xcode支持了一個新的功能Whole Module Optimization到忽,就是編譯器會將同一個Module內(nèi)的代碼都作為編譯上下文來實(shí)現(xiàn)編譯優(yōu)化,這樣只要foo和min兩個函數(shù)在同一個module內(nèi)微酬,就可以實(shí)現(xiàn)泛型特化的優(yōu)化而提高代碼的效率绘趋。這個選項(xiàng)可以在Xcode->target-> build settings -> Swift compiler -> Optimization Level中選擇 Whole Module Optimization 來達(dá)到優(yōu)化目的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末颗管,一起剝皮案震驚了整個濱河市陷遮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌垦江,老刑警劉巖帽馋,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異比吭,居然都是意外死亡绽族,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門衩藤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吧慢,“玉大人,你說我怎么就攤上這事赏表〖焓” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵瓢剿,是天一觀的道長逢慌。 經(jīng)常有香客問我,道長间狂,這世上最難降的妖魔是什么攻泼? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮鉴象,結(jié)果婚禮上忙菠,老公的妹妹穿的比我還像新娘。我一直安慰自己纺弊,他們只是感情好只搁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著俭尖,像睡著了一般氢惋。 火紅的嫁衣襯著肌膚如雪洞翩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天焰望,我揣著相機(jī)與錄音骚亿,去河邊找鬼。 笑死熊赖,一個胖子當(dāng)著我的面吹牛来屠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播震鹉,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼俱笛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了传趾?” 一聲冷哼從身側(cè)響起迎膜,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浆兰,沒想到半個月后磕仅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡簸呈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年榕订,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜕便。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡劫恒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出轿腺,到底是詐尸還是另有隱情两嘴,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布吃溅,位于F島的核電站溶诞,受9級特大地震影響鸯檬,放射性物質(zhì)發(fā)生泄漏决侈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一喧务、第九天 我趴在偏房一處隱蔽的房頂上張望赖歌。 院中可真熱鬧,春花似錦功茴、人聲如沸庐冯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽展父。三九已至返劲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間栖茉,已是汗流浹背篮绿。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吕漂,地道東北人亲配。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像惶凝,于是被迫代替她去往敵國和親吼虎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile麗語閱讀 3,837評論 0 6
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,814評論 1 10
  • 泛型編碼的目的 表達(dá)算法或者數(shù)據(jù)結(jié)構(gòu)所要求的核心接口苍鲜。(核心接口是什么呢思灰?也就是找到想要實(shí)現(xiàn)的功能的最小需求。) ...
    請叫我小陳陳閱讀 1,168評論 9 8
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,803評論 0 38
  • 1坡贺,從本篇文章/音頻/視頻中我學(xué)到的最重要的概念 成功不要迷失自己呀 不忘初心 2官辈,我在本片文章/音頻/視頻中學(xué)到...
    沐汐蓓閱讀 289評論 2 1