Dan*_*ana 5 memory erlang memory-management
我刚刚开始学习Erlang并且正在尝试一些Project Euler问题开始.但是,我似乎能够在不破坏erlang shell的情况下对大型序列进行任何操作.
即使是这样:
list:seq(1,64000000).
Run Code Online (Sandbox Code Playgroud)
崩溃erlang,错误:
eheap_alloc:无法分配467078560字节的内存("堆"类型).
实际上#字节数当然不同.
现在,半场演出是一个很大的内存,但是一个拥有4 GB RAM和足够虚拟内存空间的系统应该能够处理它.
有没有办法让erlang使用更多内存?
Dar*_*con 12
您的操作系统可能对用户进程的大小有默认限制.在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<lazy.0.26378159>
2> hd(Ns()).
1
3> Ns2 = tl(Ns()).
#Fun<lazy.0.26378159>
4> hd(Ns2()).
2
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1950 次 |
最近记录: |