erlang的binary在這個網路程式裡面佔著非常重要的地位,所以otp團隊採用了非常多的優化手段包括:
1. binary操作對應著 opcode
2. 根據生命期和作用,有4種型別的binary
3. hipe優化,把bs_操作直接翻譯成asm指令
4. 編譯器層面消除無必須的操作。
下面的例子就是演示4的特性:
yu-fengdemacbook-2:~ yufeng$ cat bin.erl
-module(bin).
-export([start/1]).
start(a)->
b1= <<12>>,
b2 = <>,
b3= <>,
% b3的值是預先可以知道的, 無需一步步的構造
<<"abcd", 3:32,b3:128/binary,_/binary>> = <<"abcd1234",a/binary,2:32, 8773:64, "a", 5.0/float>>.
% 2:32, 8773:64, "a", 5.0/float 這些都是預先知道的 直接翻譯成二進位製流。
yu-fengdemacbook-2:~ yufeng$ erlc +"'s'" bin.erl
yu-fengdemacbook-2:~ yufeng$ cat bin.s
. %% version = 0
,,]}...
..,,1}.
.,}.
,2,,}.
,[,,1],}.
,[,,1],}.
,,0,1,,}.
}.,,8,,}.
%% 一步到位
}.,[,2,0,]}.
,[,64,]}.
%% 一步到位,[,
2,,8,]},unsigned,big]},
]}.,[,,
8,]},unsigned,big]}]}.
,[,]}.
%% 一步到位
,}.return..}.
..,,0}.
.,}.}..
.,,1}.
.,}.
,}.}.
所以我們在使用binary的時候, 盡可能的利用這個特性。
進行binary優化的json解析模組
看bob的mochiweb,然後閱讀json的 因為r12b對binary做了優化,而mochijson2.erl是採用的記錄binary中偏移量的方法來進行匹配,因此決定寫乙個執行binary優化的json解析模組。週六在家沒事寫了寫tqjson.erl,最後發現效率提公升4 左右,應該還算比錯。...
c 的const常量優化
const int a 10 int b const cast a b 20 cout a b endl 輸出為10 20 原因如下 c 常量優化策略 a為const在編譯階段由於編譯器優化策略,會直接將上下文中出現a的地方替換掉。因而編譯結束時實際 語句相當於這樣 cout 10 b endl 如...
Symbian OS中的binary檔案
前幾日,此文章寫到一半的時候,按儲存鍵,然後發表,發現竟是空白。進入編輯模式後,回滾也沒有效果,搞得興致全無,我對csdn的blog的編輯器印象分大跌。閒言少敘,書說正題。和windows系統一樣,symbian os也是用exe做為其可執行程式的副檔名。但是與windows exe檔案的pe結構不...