用erlang的话讲,深入了解erlang不同数据类型所占的内存空间大小,是erlang高效编程的一个良好开始。
一个程序要运行,就要先描述其算法。描述一个算法应先说明算法中要用的数据,数据以变量或常量的形式来描述。每个变量或常量都有数据类型。
很多人都以为要把算法写得多精湛,才算高效编程,其实不然,细微处见功夫。
以下内容展示了erlang各种数据类型占用的内存大小。
Data type |
Memory size |
Small integer |
1 word On 32-bit architectures: -134217729 < i < 134217728 (28 bits) On 64-bit architectures: -576460752303423489 < i < 576460752303423488 (60 bits) |
Big integer |
3..N words |
Atom |
1 word. Note: an atom refers into an atom table which also consumes memory. The atom text is stored once for each unique atom in this table. The atom table isnotgarbage-collected. |
Float |
On 32-bit architectures: 4 words On 64-bit architectures: 3 words |
Binary |
3..6 + data (can be shared) |
List |
1 word + 1 word per element + the size of each element |
String (is the same as a list of integers) |
1 word + 2 words per character |
Tuple |
2 words + the size of each element |
Pid |
1 word for a process identifier from the current local node, and 5 words for a process identifier from another node. Note: a process identifier refers into a process table and a node table which also consumes memory. |
Port |
1 word for a port identifier from the current local node, and 5 words for a port identifier from another node. Note: a port identifier refers into a port table and a node table which also consumes memory. |
Reference |
On 32-bit architectures: 5 words for a reference from the current local node, and 7 words for a reference from another node. On 64-bit architectures: 4 words for a reference from the current local node, and 6 words for a reference from another node. Note: a reference refers into a node table which also consumes memory. |
Fun |
9..13 words + size of environment. Note: a fun refers into a fun table which also consumes memory. |
Ets table |
Initially 768 words + the size of each element (6 words + size of Erlang data). The table will grow when necessary. |
Erlang process |
327 words when spawned including a heap of 233 words. |
那么,一个word占多大的空间?
1> erlang:system_info(wordsize).
8
通常情况下,32位系统占4字节,64位系统占8字节。
参考:http://blog.csdn.net/mycwq/article/details/16893209
分享到:
相关推荐
在IT领域,尤其是在大数据处理和高性能计算中,选择正确的编程语言对于实现千万级内存数据的高效处理至关重要。本文将深入探讨Java、PHP、Python和Erlang这四种语言在处理千万级内存数据时的性能差异。 首先,让...
在IT领域,Erlang是一种强大的并发编程语言,主要用于构建高可用性、容错性和分布式系统。它以其轻量级进程、消息传递和热代码升级等特性而闻名。Unix(包括其衍生版本如Linux)是广泛使用的操作系统,具有丰富的...
Erlang核心开发者Lukas Larsson在2014年3月份Erlang Factory上的一个演讲详细介绍了Erlang内存体系的原理以及调优案例 根据siyao zheng博客上听写的资源进行的翻译,大致只翻译了80%但核心部分已经完整,希望对大家...
1. 确认内存泄漏:使用像top这样的系统监控工具,观察Erlang进程的内存占用情况。如果内存消耗持续升高,那么很可能存在内存泄漏。 2. 进入线上系统:使用Rebar工具,可以方便地管理Erlang项目。通过远程shell命令...
Erlang是一种高级的编程语言,专为高并发、分布式系统设计,由Ericsson的计算机科学实验室所开发。Erlang的内存管理系统是它的一个核心特性,被设计用来支持高可靠性与容错性,而无需显式的垃圾回收。这种机制在处理...
它负责解释Erlang字节码,提供内存管理、垃圾回收和并发调度等功能。 ### 10. 语言特性 Erlang的语法简洁,支持模式匹配、函数式编程、列表处理和递归等特性。它的动态类型系统和强大的类型推断让代码更加灵活。 ...
ETS是Erlang内置的一种内存数据库,用于存储和检索Erlang术语。它提供了高效且灵活的数据存储,适用于快速读写操作。ETS支持五种不同类型的表:set、ordered_set、bag、duplicate_bag和proplists,每种类型都有其...
Erlang是一种动态类型语言,类型检查在运行时进行,这意味着你不需要在代码中声明变量的数据类型。不过,理解Erlang的类型系统对于编写高效且可维护的代码至关重要。 递归在Erlang程序设计中占有重要地位,因为...
- **Erlang的数据类型**:包括原子(atom)、整数、浮点数、字符串、列表、元组、位串等。 - **Pattern Matching**:Erlang的匹配操作符`=`允许在函数调用、case语句和receive语句中进行模式匹配。 熟悉这些概念和...
3. **Erlang数据类型和API**:介绍CNode API,包括如何在C中表示和操作Erlang的数据类型(如整数、原子、列表等),以及如何调用Erlang函数和处理返回结果。 4. **进程通信**:阐述如何在CNode中创建Erlang进程,...
### Erlang Binary与Bit String 数据类型详解 #### 引言 Erlang 是一种功能强大且灵活的编程语言,尤其适合开发高并发、分布式及容错性应用。自 R12B 版本以来,Erlang 在处理二进制数据方面引入了两项重大更新:...
- **高效数据结构**:Erlang内置了几种高效的数据类型如原子(Atom)、二进制(Binary)、列表(List)和元组(Tuple)。 - **垃圾收集**:ERTS采用了标记-清除算法,并支持分代垃圾回收策略。 - **软实时系统**:ERTS支持软...
- **减少内存消耗**: 通过优化数据结构和算法来降低内存占用。 - **提升响应速度**: 针对瓶颈进行针对性优化,如使用更高效的并发模型。 #### 3. 编码最佳实践 - **模块化**: 将代码组织成多个小而专注的模块,...
1. **Erlang语法**:涵盖基本的变量、数据类型(如原子、列表、元组和二进制)、控制结构(如case表达式和if语句)以及函数定义。 2. **函数式编程概念**:Erlang是纯函数式语言,书中可能会介绍函数式编程的基本...
这涉及到监控ERTS的运行时参数,例如ETS(Erlang Term Storage)使用的内存、进程的数量和状态,以及SMP(对称多处理)支持程度等。 #### 3. 编码最佳实践 在Erlang开发中,最佳实践包括使用模式匹配、递归、消息...
在Erlang中,Record提供了一种方便的方式来定义和访问具有固定字段的数据类型。 在Erlang中,Records是由一个特殊的语法创建的,形如`#record_name{field1 = value1, field2 = value2, ...}`。Record_name是记录的...
**动态类型**:Erlang是动态类型的,变量的类型在运行时确定,提供了灵活性。 **及早求值或严格求值**:Erlang的求值策略是及早求值,意味着表达式一旦被引用就会计算其值。 **脚本语言**:Erlang也可作为脚本语言...
4. **库和工具的更新**:OTP中的各种库(如Mnesia数据库、ERTS(Erlang Run-Time System)和其他并发工具)可能进行了升级,以适应新的需求和改进功能。 5. **并发与分布式系统支持**:Erlang以其轻量级进程和消息...
- **Erlang基础**:包括基本语法、数据类型、函数定义、模式匹配、过程和模块等。 - **并发编程**:介绍Erlang的进程、消息传递、同步和通信机制,以及如何利用这些特性实现并发。 - **分布式Erlang**:讲解如何在...
- **编码与解码的类型匹配**:确保 Erlang 数据结构与 JSON 数据类型之间的正确映射。 - **错误处理**:当解码过程中遇到无效 JSON 或编码时出现数据不兼容,需要捕获并处理相应的异常。 - **性能调优**:对于大规模...