binary的常量優化

2021-08-30 05:53:49 字數 1114 閱讀 4707

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結構不...