Erlang数据类型的表示和实现(5)——binary
binary 是 Erlang 中一个具有特色的数据结构,用于处理大块的“原始的”字节块。如果没有 binary 这种数据类型,在 Erlang 中处理字节流的话可能还需要像列表或元组这样的数据结构。根据之前对这些数据结构 Eterm 的描述,数据块中的每一个字节都需要一个或两个机器字来表达,明显空间利用率低,因此 binary 是一种空间高效的表示形式。
在 binary 对字节序列处理能力的基础上,Erlang 进一步泛化 binary 的功能,提供了 bitstring 数据结构,让开发者能打破字节的边界,能在 bit 层面上操作原始数据块。bitstring 的 bit 层次的模式匹配功能特别适用于网络编程中网络协议数据包的解析和文件解析等操作。
本文从实际的需求出发,从简单到复杂,逐步讨论 Erlang 中 binary 和 bitstring 的实现及优化。本文会介绍 binary 相关数据结构的 Eterm 以及在 Erlang 虚拟机内部的表达形式,并结合具体的示例程序和编译器生成的 beam 字节码及对应的虚拟机代码讨论 Erlang 对 binary 和 bitstring 的操作所做的优化。
下面首先讨论最简单的 binary —— heap binary。
heap binary
heap binary 是直接放在进程堆中的 binary,也就是说整个 binary 的数据都在进程堆中,就好像其他 boxed 数据结构一样。下图展示了 heap binary 在堆中的表现形式。
Erlang数据类型的表示和实现(5)——binary相关推荐
- Erlang 数据类型。。
2019独角兽企业重金招聘Python工程师标准>>> 数值 二进制串/位串 原子 元祖 列表 唯一标识符(pid,端口,引用) Fun 函数 Erlang 中的数据通常被称作项式 ...
- Erlang库 -- 有意思的库汇总
抄自这里 首先,库存在的目的大致可分为: 1.提供便利 2.尽可能解决一些痛点 首先,我们先明确一下Erlang编程语言的一些痛点(伪痛点): 1,单进程问题 Erlang虚拟机属于抢占式调度,抢占式 ...
- Rust 和Erlang的对比
\ 本文要点: \\ Erlang提供轻量级流程.不变性.位置透明的分布式.消息传递.监督行为以及许多其他高级动态功能,这些特性使其成为容错.高可用性和可扩展系统的理想之选.\\t 不幸的是,在执行X ...
- 【转载】Erlang精彩讨论-回“老赵”关于“Erlang中最大的问题”
原文:http://erlang-china.org/study/puzzle-in-erlang_pattern_match.html/comment-page-1#comments http:// ...
- Sqlserver数据类型精解
各数据类型所占尾数,以及取值范围: bit: 1位: 0或1的整型数字 int: 4个字节:从-2^31(-2,147,483,648)到2^31(2,147,483,647 ...
- ms-sql数据类型和access数据类型大全
(1)二进制数据类型 二进制数据包括 Binary.Varbinary 和 Image Binary 数据类型既可以是固定长度的(Binary),也可以是变长度的. Binary[(n)] 是 n 位 ...
- mysql 负数类型_MySQL数据类型详解
MySQL数据类型,可以被分为3类:数值类型.日期和时间类型以及字符串(字符)类型 方括号("["和"]")指出可选的类型修饰符的部分 M 指出最大的显示尺寸. ...
- [Erlang]如何使用NIF
在Erlang中,NIF(Native Implemented Function)被用来扩展erlang的某些功能,一般用来实现一些erlang很难实现的,或者一些erlang实现效率不高的功能. N ...
- Windows下使用NIF扩展Erlang方法
在Erlang中,NIF(Native Implemented Function)被用来扩展erlang的某些功能,一般用来实现一些erlang很难实现的,或者一些erlang实现效率不高的功能. N ...
最新文章
- 深入浅出SpringBoot源码分析
- 面向对象的五大原则与IOC
- win10商店打不开_PS打不开Raw格式?更新ACR新方式!【第05期 三分钟聊摄影】
- 完整SQL分页存储过程(支持多表联接)
- node oracle linux 安装,Linux 下 nodejs 使用官方oracledb库连接数据库 教程
- Android version and Linux Kernel version
- kubesphere 3.0离线安装
- 数智化时代合格数据架构师如何养成?
- 【狂人小白】如何将Java项目发布到Maven中
- 极客班C++ STL(容器)第二周笔记
- kubernetes1.8.4安装指南 -- 5. 证书生成
- .NET开发者省份分布排名
- 新词新意—The Sticks 乡下
- arm linux 蜂鸣器qt,Qt 程序中使用蜂鸣器 ioctl()
- mysqli取代mysql,什么时候应该使用MySQLi代替MySQL?
- java程序包condition不存在,Ant javac:包x不存在,但我将x.jar添加到java构...
- ESD介绍及TVS的原理和应用-USB等
- Android ProfileOwner 应用的能力
- MyIM服务端聊天记录(网络编程作业)
- 领导绝不会告诉你的,提拔干部的三大关键因素