- 浏览: 32805 次
- 性别:
- 来自: 北京
最新评论
-
liumengfan:
{beam_dynamic_libraries, get_dy ...
system_info模块 -
liumengfan:
{environment, [split_env( ...
system_info模块 -
liumengfan:
其中{environment_erts, os_getenv ...
system_info模块 -
liumengfan:
centos再安装erlang之前,先安装如下软件:yum i ...
SystemTap and Erlang: a tutorial -
liumengfan:
判断是否是内部port的程序:#define is_inter ...
erlang判断内部pid的方法
今天再erlang inline 编译中读到erlang的函数也可以内联编译。
但是内联功能从来不会默认打开的。如果想使用的话,必须显示的在代码里使用-compile()属性。
当再代码里加上-compile(inline).时,编译器会根据自己的规则来决定哪个函数被定义成内联函数,其中有一个因素就是-compile({inline_size, Size}).,默认的size是24,这个size作为一个权重来参与决定某个函数是否被编译成内联的函数。
我们也可以使用
-compile({inline, [test/0, start/1]}).
或者
-compile({inline, [{test, 0}, {start, 1}]}).
来显示的指定哪个函数被编译成内联的函数。
我们还可以使用
-compile(inline_list_funcs).
来显示将下列的函数内联到该模块
* lists:all/2
* lists:any/2
* lists:foreach/2
* lists:map/2
* lists:flatmap/2
* lists:filter/2
* lists:foldl/3
* lists:foldr/3
* lists:mapfoldl/3
* lists:mapfoldr/3
另外我们也可以同时指定这些选项来编译模块,例如:
-compile([inline, {inline_size, 100}, inline_list_funcs, {inline, [show/0]}]).
下面我们使用一个例子来看一下是否使用内联编译的区别:
[list]不是用内联编译
erlang文件
生成的汇编代码
使用内联编译
erlang代码
生成的汇编代码
[/list]
其中生成汇编代码的命令是:
erlc -S test
但是内联功能从来不会默认打开的。如果想使用的话,必须显示的在代码里使用-compile()属性。
当再代码里加上-compile(inline).时,编译器会根据自己的规则来决定哪个函数被定义成内联函数,其中有一个因素就是-compile({inline_size, Size}).,默认的size是24,这个size作为一个权重来参与决定某个函数是否被编译成内联的函数。
我们也可以使用
-compile({inline, [test/0, start/1]}).
或者
-compile({inline, [{test, 0}, {start, 1}]}).
来显示的指定哪个函数被编译成内联的函数。
我们还可以使用
-compile(inline_list_funcs).
来显示将下列的函数内联到该模块
引用
* lists:all/2
* lists:any/2
* lists:foreach/2
* lists:map/2
* lists:flatmap/2
* lists:filter/2
* lists:foldl/3
* lists:foldr/3
* lists:mapfoldl/3
* lists:mapfoldr/3
另外我们也可以同时指定这些选项来编译模块,例如:
-compile([inline, {inline_size, 100}, inline_list_funcs, {inline, [show/0]}]).
下面我们使用一个例子来看一下是否使用内联编译的区别:
[list]
-module(test). -export([test/0, show/0]). test() -> show(), show(), show(), show(). show() -> io:format("this is ~p~n", ["test"]).
生成的汇编代码
{module, test}. %% version = 0 {exports, [{module_info,0},{module_info,1},{show,0},{test,0}]}. {attributes, []}. {labels, 9}. {function, test, 0, 2}. {label,1}. {line,[{location,"test.erl",5}]}. {func_info,{atom,test},{atom,test},0}. {label,2}. {allocate,0,0}. {line,[{location,"test.erl",6}]}. {call,0,{f,4}}. {line,[{location,"test.erl",7}]}. {call,0,{f,4}}. {line,[{location,"test.erl",8}]}. {call,0,{f,4}}. {call_last,0,{f,4},0}. {function, show, 0, 4}. {label,3}. {line,[{location,"test.erl",11}]}. {func_info,{atom,test},{atom,show},0}. {label,4}. {move,{literal,["test"]},{x,1}}. {move,{literal,"this is ~p~n"},{x,0}}. {line,[{location,"test.erl",12}]}. {call_ext_only,2,{extfunc,io,format,2}}. {function, module_info, 0, 6}. {label,5}. {line,[]}. {func_info,{atom,test},{atom,module_info},0}. {label,6}. {move,{atom,test},{x,0}}. {line,[]}. {call_ext_only,1,{extfunc,erlang,get_module_info,1}}. {function, module_info, 1, 8}. {label,7}. {line,[]}. {func_info,{atom,test},{atom,module_info},1}. {label,8}. {move,{x,0},{x,1}}. {move,{atom,test},{x,0}}. {line,[]}. {call_ext_only,2,{extfunc,erlang,get_module_info,2}}.
-module(test). -export([test/0, show/0]). -compile([inline, {inline_size, 100}, inline_list_funcs, {inline, [show/0]}]). test() -> show(), show(), show(), show(). show() -> io:format("this is ~p~n", ["test"]).
生成的汇编代码
{module, test}. %% version = 0 {exports, [{module_info,0},{module_info,1},{show,0},{test,0}]}. {attributes, []}. {labels, 9}. {function, test, 0, 2}. {label,1}. {line,[{location,"test.erl",9}]}. {func_info,{atom,test},{atom,test},0}. {label,2}. {allocate,0,0}. {move,{literal,["test"]},{x,1}}. {move,{literal,"this is ~p~n"},{x,0}}. {line,[{location,"test.erl",16}]}. {call_ext,2,{extfunc,io,format,2}}. {move,{literal,["test"]},{x,1}}. {move,{literal,"this is ~p~n"},{x,0}}. {line,[{location,"test.erl",16}]}. {call_ext,2,{extfunc,io,format,2}}. {move,{literal,["test"]},{x,1}}. {move,{literal,"this is ~p~n"},{x,0}}. {line,[{location,"test.erl",16}]}. {call_ext,2,{extfunc,io,format,2}}. {move,{literal,["test"]},{x,1}}. {move,{literal,"this is ~p~n"},{x,0}}. {line,[{location,"test.erl",16}]}. {call_ext_last,2,{extfunc,io,format,2},0}. {function, show, 0, 4}. {label,3}. {line,[{location,"test.erl",15}]}. {func_info,{atom,test},{atom,show},0}. {label,4}. {move,{literal,["test"]},{x,1}}. {move,{literal,"this is ~p~n"},{x,0}}. {line,[{location,"test.erl",16}]}. {call_ext_only,2,{extfunc,io,format,2}}. {function, module_info, 0, 6}. {label,5}. {line,[]}. {func_info,{atom,test},{atom,module_info},0}. {label,6}. {move,{atom,test},{x,0}}. {line,[]}. {call_ext_only,1,{extfunc,erlang,get_module_info,1}}. {function, module_info, 1, 8}. {label,7}. {line,[]}. {func_info,{atom,test},{atom,module_info},1}. {label,8}. {move,{x,0},{x,1}}. {move,{atom,test},{x,0}}. {line,[]}. {call_ext_only,2,{extfunc,erlang,get_module_info,2}}.
[/list]
其中生成汇编代码的命令是:
erlc -S test
发表评论
-
erlang host address
2014-03-07 13:40 761在rabbitMQ看到一段关于转换地址的代码: 留着以后用 ... -
record小记
2014-03-06 17:46 657今天阅读rabbitMQ代码,遇到一段代码很疑惑: try ... -
Distributed Semaphores with RabbitMQ
2014-03-04 21:54 1374翻译自(http://www.rabbitmq.com/blo ... -
system_info模块
2013-07-31 22:16 1120在看了Erlang新增全面的系统信息收集器-system_in ... -
erlang的gdb调试
2013-07-08 21:00 1616当我们完成erlang的正常配置和编译后,我们可以构建一个de ... -
SystemTap and Erlang: a tutorial
2013-07-06 19:16 1237参照该文章安装SystemTap and Erlang: a ... -
列表[A||boolen]
2013-07-06 16:14 813今天读到riak_sysmon时, ... -
erlang的erl_eval
2013-07-05 13:56 1202自己尝试使用erl_eval做一些联系,发掘改模块的功能: ... -
使用erlang实现动态替换字符串中的变量
2013-07-05 13:18 1622通过erlang,我们可以使用 {ok, Ts, _} = e ... -
使用erlang的动态执行编写DSL
2013-07-05 12:54 1387今天看到Erlang 动态执行和erlang动态解释, 实验的 ... -
Erlang如何查看gen_server系列的状态 (高级)
2013-07-05 09:16 764引用Erlang如何查看gen_server系列的状态 (高级 ... -
通过port获取相应的节点名
2013-07-04 23:41 1018今天看了霸爷的节点间通讯的通道微调和谁引起busy_dist_ ... -
erlang的abstract_code代码
2013-07-04 21:04 695在看了霸爷的erlang的abstract code之后,自己 ... -
实验CPU密集型计算
2013-07-04 20:40 1270今天实验了一下霸爷博 ... -
erlang判断内部pid的方法
2013-07-04 13:48 1484在erl_term.h文件里: #define _TAG_ ... -
inet:setopts/2函数
2013-07-03 16:18 807下面引用霸爷的话,给自己做一个笔记 引用inet_drv内部每 ... -
erlang:port_command函数
2013-07-02 22:10 3316今天读到褚霸博客里的g ... -
iolist类型
2013-07-02 21:47 837今天读到http://blog.yufeng.info的gen ... -
epmd的启动参数3
2013-07-01 21:28 1124和epmd相关的环境变量 ERL_EPMD_RELAXED_ ... -
epmd的启动参数2
2013-07-01 21:07 1098使用epmd的-port选项时,实验的例子是: [liuf ...
相关推荐
Erlang MySQL 编译指南 在IT领域,Erlang是一种强大的编程语言,尤其在构建高并发、分布式系统方面表现出色。而MySQL是广泛使用的开源关系型数据库管理系统。将Erlang与MySQL结合,可以实现高效的数据交互。本文将...
在给定的标题“erlang 24.0 龙芯 loongarch64 预编译版本”中,我们可以看到这个软件包是为龙芯架构(LoongArch64)平台特别编译的Erlang 24.0版本。由于Erlang官方不直接提供针对龙芯处理器的二进制包,这意味着这...
%% editplus + 批处理 + 本文 实现简易编译 %% 作者:冷志峰 %% 2009,8,3 %% email:sunbo008@126.com %% 谁给我个这个网站的邀请码 http://www.fpscript.com/bbs/forum-65-1.html %% %% 步骤1:编写批处理文件 %%...
mmaker为多进程编译,修改自otp/lib/tools/src/make.erl,可以启动多个process进行编译,从而提高编译速度。 本版本优化编译等待,一个文件编译完成后,立即进行后续文件编译,不用等待分组完成。 Usage: erl -pa ebin ...
本篇将详细介绍在ARM架构上编译安装Erlang以及其所需的依赖rpm包。 首先,Erlang是RabbitMQ的基础,它是一门强大的并行计算和分布式计算语言,以其高可用性、容错性和实时性能而闻名。在ARM系统上编译Erlang,我们...
**Erlang设计指南** Erlang是一种面向并发的、函数式编程语言,它由瑞典电信设备制造商Ericsson开发,主要用于构建高度可扩展和容错性强的分布式系统。"Programming Erlang: Software for a Concurrent World"是Joe...
【二郎助手:Erlang开发的利器】 在IT领域,Erlang是一种强大的编程语言,尤其在并发处理和分布式系统方面表现出色。为了更好地支持Erlang的开发,二郎助手应运而生,它是一款专为Elang语言定制的开发工具,旨在...
它会实时重新编译并重新加载您的Erlang代码。 有了Sync,您就可以毫无困难地进行编码。 “没有摩擦的代码”是什么意思? 这意味着在运行Sync的情况下,您不再需要担心再次运行make或c:l(Module) 。 编写代码,保存...
- **编译优化**:Turbo Erlang采用了先进的编译技术,包括但不限于类型推断、循环展开、函数内联等优化手段,这些都有助于减少运行时的开销。 - **运行时优化**:通过高效的数据结构管理、内存分配策略以及垃圾...
3. **编译Erlang**:进入解压后的目录,运行`./configure`命令来配置编译选项。这一步会检测你的系统环境并生成适合的Makefile。 4. **构建和测试**:执行`make`命令开始编译Erlang。这个过程可能需要一些时间,...
- 编译成功后,使用`sudo make install`命令将Erlang OTP安装到系统路径中。 7. **验证安装**: - 安装完成后,你可以通过运行`erl`命令来启动Erlang shell,如果一切顺利,你应该看到Erlang的欢迎界面。 - 使用...
6. **编译器和工具链**:Erlang的编译器和构建工具可能也得到了改进,使得代码编译更快,调试更方便。 7. **兼容性**:Erlang22可能会改进与其他软件和硬件平台的兼容性,包括新的操作系统版本和硬件架构。 要使用`...
5. **编译源码**:使用`make`命令编译Erlang源码。 6. **安装Erlang**:执行`sudo make install`,这将把编译好的Erlang安装到系统路径中。 7. **设置环境变量**:可能需要将Erlang的bin目录添加到PATH环境变量中...
6. **编译器升级**:Erlang的BEAM虚拟机和编译器可能会有优化,使得编译速度更快,生成的代码更高效。 作为“源码软件”,Erlang 25.0同样提供了源代码,开发者可以深入研究其内部工作原理,进行定制化开发,或者为...
项目包含的文件`mmake.beam`是Erlang的编译后代码,它可能是一个构建工具,用于自动化编译和管理Erlang源代码。`cfile`可能是一个处理文件操作的模块,游戏服务器通常需要读写各种配置文件或日志文件。`ctl`可能是一...
**Erlang编程:Introducing Erlang** Erlang是一种函数式编程语言,由爱立信在1986年开发,主要用于构建高可用性、容错性和并发性的分布式系统。"Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,...
这意味着该压缩包是为Linux环境设计的,用户需要在Linux环境下编译和安装Erlang 21.3。 在Linux上安装Erlang 21.3的步骤通常包括以下几个关键步骤: 1. **解压**: 首先,使用`tar -zxvf otp_src_21.3.tar.gz`命令...
通常,Erlang在Unix-like系统上编译和运行更为顺畅,但对于Windows平台,官方也提供了预编译的二进制安装包,简化了安装过程。 压缩包内的文件"otp_src_20.3"是OTP 20.3的源代码,包含了Erlang虚拟机、标准库以及...
好东西,一个erlang并行编译的源码。通过对make.erl(otp/lib/tools/src/make.erl)进行修改,提供一个支持多进程编译的mmake.erl。其接口和make.erl相似,只是第一个参数为并发编译数
"Erlang中文基础教程" Erlang 编程语言是一种功能强大且灵活的编程语言,它提供了...Erlang 编程语言是一种功能强大且灵活的编程语言,提供了一个交互式的 shell 环境,支持顺序编程、模块和函数、编译和运行等特点。