【问题标题】:What are the constraints/limitations of compiling with "+native"?用“+native”编译的约束/限制是什么?
【发布时间】:2011-01-13 12:42:41
【问题描述】:

与通常的“非原生”编译相比,使用 +native 选项编译 Erlang .erl 源代码有哪些限制/约束?

相关:Erlang OTP release compiles with HiPE?

【问题讨论】:

  • 谢谢,我只是想知道为什么 hipe 没有加快我的程序。使用 +native 时,它​​的运行速度是原来的两倍。

标签: erlang hipe


【解决方案1】:

BEAM 模拟器提供的跟踪、断点和单步执行功能在本机编译代码中不可用。还有一个限制是,当您加载同一模块的较新版本时,本机代码并没有真正从内存中卸载。 (如果你有一个长时间运行的系统,你不断升级模块或动态生成和编译模块,这可能是一个问题。)

此外,在本机代码和模拟 BEAM 代码之间跳转时会有少量开销,因此您应该避免在速度很重要的紧密循环中进行这种模式切换。最好将所有密切相关的模块编译成原生模块,如果可能的话,还要编译最重要的标准库模块。

最后,虽然原生编译器经过了很好的测试,但 HiPE 中出现编译器错误的概率比 BEAM 仿真器 C 代码中出现错误的概率略高(尽管可能不高于 GCC 中的错误),所以您可能会面临更大的系统段错误风险。不过现在已经很少见了。

总而言之,目前可能不推荐使用原生编译的主要地方是独立产品(例如您交付给客户的黑盒服务器),其稳定性、远程可调试性和低内存使用率是您主要关心的问题,而计算速度通常不是。

【讨论】:

  • “目前可能不推荐本地编译的主要地方是独立产品”:这似乎与@rvidring 在相关帖子中所说的形成对比。
  • 似乎找不到您所指的帖子。指针?
  • 我说了什么? :-) 我似乎也找不到。
猜你喜欢
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
  • 2018-03-17
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
相关资源
最近更新 更多