当前位置:  开发笔记 > 编程语言 > 正文

为什么Erlang会在大型序列上崩溃?

如何解决《为什么Erlang会在大型序列上崩溃?》经验,为你挑选了1个好方法。

我刚刚开始学习Erlang并且正在尝试一些Project Euler问题开始.但是,我似乎能够在不破坏erlang shell的情况下对大型序列进行任何操作.

即使是这样:

list:seq(1,64000000).

崩溃erlang,错误:

eheap_alloc:无法分配467078560字节的内存("堆"类型).

实际上#字节数当然不同.

现在,半场演出是一个很大的内存,但是一个拥有4 GB RAM和足够虚拟内存空间的系统应该能够处理它.

有没有办法让erlang使用更多内存?



1> Darius Bacon..:

您的操作系统可能对用户进程的大小有默认限制.在Linux上,您可以使用ulimit更改此设置.

您可能希望迭代这些64000000个数字而不需要一次全部在内存中.使用惰性列表可以编写类似于list-all-at-once代码的代码:

-module(lazy).
-export([seq/2]).

seq(M, N) when M =< N ->
    fun() -> [M | seq(M+1, N)] end;
seq(_, _) ->
    fun () -> [] end.

1> Ns = lazy:seq(1, 64000000).
#Fun
2> hd(Ns()).
1
3> Ns2 = tl(Ns()).
#Fun
4> hd(Ns2()).
2

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有