博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebAssembly基础
阅读量:6326 次
发布时间:2019-06-22

本文共 1019 字,大约阅读时间需要 3 分钟。

WebAssembly定义

WebAssembly是一种的语言,可以在现代浏览器环境中运行,并提供了功能和性能上的优势。可以将其它语言,如C/C++等,编译成Assembly格式的代码,然后在浏览器中运行。

WebAssembly的目标

  • WebAssembly代码可以获得非常快的运行速度。

  • 增加可读性,WebAssembly还有可读的文本格式,易于编写,调试和阅读。

  • WebAssembly具有非常高安全性,它在一个沙箱环境中执行,同时遵守浏览器的同源策略和权限规则。

  • 和其它Web语言有很好的兼容性

WebAssembly工作原理

Web平台有两不分组成组成:a)执行应用程序的虚拟机,b)Web API,例如(DOM,WebGL等)。为了让浏览器支持Assembly,虚拟机实现了加载两种语言(javascript,Assembly)的功能,javascript可以同过Web API引入WebAssembly代码,WebAssembly可以导入和异步执行javascript的模块。

WebAssembly的关键部分概览

  • module:表示由浏览器编译为可执行机器代码的WebAssembly二进制文件。 对于一个模块是无状态的,因此,像Blob一样,可以显式缓存在IndexedDB中,也可以在windows和worker之间共享(通过postMessage())。 A模块像ES2015模块一样声明导入和导出。

  • Memory:一个可调整大小的ArrayBuffer,它包含可以被WebAssembly的低级内存访问指令读取和写入的线性字节数组。

  • Table:一种引用类型的可变素组(例如函数),无法将其作为原始字节存储在存储器中。

  • Instance:module,Memory,Table等得运行实例

一个C++程序转化为Assembly的例子

图片描述

  • 安装

  • 编写c++程序,例如:

#include 
int main() { printf("hello, world!\n"); return 0;}
  • 将C++命名,此处命名为hello.c,然后编译输出html代码,编译命令如下:

emcc hello.c -s WASM=1 -o hello.html

编译输出文件如下:

`hello.html

hello.js
hello.js.temp.js`

  • 用浏览器打开hello.html,即可查看效果

转载地址:http://nqvaa.baihongyu.com/

你可能感兴趣的文章
6.1 压缩打包介绍 6.2 gzip压缩工具 6.3 bzip2压缩工具 6.4 xz压缩工具
查看>>
LAMP环境搭建(centos6.9+apache2.4+mysql5.7+php7.1)
查看>>
[Linux学习笔记] Linux常用命令 - 权限管理命令
查看>>
SpringBoot-Spring Data Jpa使用(一)
查看>>
CentOS5 MySQL优化
查看>>
在Codeigniter框架中使用NuSOAP
查看>>
java IO
查看>>
在Struts中用超链接提交表单
查看>>
android studio git 学习笔记
查看>>
python 字符串逆序输出
查看>>
Hyper-V在windows2008 R2中的部署及使用
查看>>
从http请求的Body中获取参数
查看>>
Android Studio 中 gradle 构建 堆栈空间不足
查看>>
如何使用SonarQube Scanner扫描器对代码进行扫描
查看>>
ARC
查看>>
设计模式 - 行为型 - 责任链模式
查看>>
我的友情链接
查看>>
Lesson1 - Vmware 概述
查看>>
Mysql索引的理解和正确使用
查看>>
Vuejs2.0学习笔记-自定义指令
查看>>