WebAssembly基础

本文介绍了WebAssembly的基本概念,包括其目标、工作原理以及如何将C++程序编译为WebAssembly格式。WebAssembly是一种可在浏览器环境中高效运行的语言,支持快速执行、高可读性和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的例子

这里写图片描述

过程如下:
    #include <stdio.h>

    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,即可查看效果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值