繁体   English   中英

为什么使用erts_debug原子的内存为零:size / 1?

[英]why the memory for atom is zero using erts_debug:size/1?

我使用erts_debug:size/1来计算erlang VM中atom的内存,但我发现输出为零。 谁能解释一下原因?

7> erts_debug:size(true).
0

原因是原子与原子的数据一起被固定在原子表中,因此整个节点中只有一个原子的副本。 这意味着在您的数据中,atom只是原子表中的标记引用,不占用空间。 因此,大小为零。

所以这不是一个不一致或错误。

在文档中,您可以阅读:

%% size(Term)
%%  Returns the size of Term in actual heap words. Shared subterms are
%%  counted once.  Example: If A = [a,b], B =[A,A] then size(B) returns 8,
%%  while flat_size(B) returns 12.

这里的关键字是HEAP。 进程有堆栈和堆。 有一个很棒的演示文稿,它可以显示存储在堆上的内容以及堆栈中的内容(创建术语时)(从第8页开始阅读)。

http://www.erlang-factory.com/upload/presentations/467/Halfword_EUC_2011.pdf

基本上,当你创建一个原子。 堆上没有任何内容,堆栈上有一个单词指针。 它指向原子表,它也消耗内存而不是垃圾收集(永远不会在您的应用程序中动态创建原子!)。 资料来源: http//www.erlang.org/doc/efficiency_guide/processes.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM