当前位置: 首页 > news >正文

海燕网站建设公司广西建设质监站官方网站

海燕网站建设公司,广西建设质监站官方网站,linux网站建设模板,我的世界怎么自己做皮肤并上传网站编译目标选择#xff1a; 在WebAssembly标准出现前的很长一段时间内#xff0c;Emscripten的编译目标是asm.js。自1.37.3起#xff0c;Emscirpten才开始正式支持WebAssembly。 以asm.js为编译目标时#xff0c;C/C代码被编译为.js文件#xff1b;以WebAssembly为编译目标…  编译目标选择 在WebAssembly标准出现前的很长一段时间内Emscripten的编译目标是asm.js。自1.37.3起Emscirpten才开始正式支持WebAssembly。 以asm.js为编译目标时C/C代码被编译为.js文件以WebAssembly为编译目标时C/C代码被编译为.wasm文件及对应的.js胶水代码文件。两种编译目标从应用角度来说差别不大——它们使用的内存模型、函数导出规则、JavaScript与C相互调用的方法等都是一致的。我们在实际使用中遇到的主要区别在于模块加载的同步和异步当编译目标为asm.js时由于C/C代码被完全转换成了asm.jsJavaScript子集因此可以认为模块是同步加载的而以WebAssembly为编译目标时由于WebAssembly的实例化方法本身是异步指令因此模块加载为异步加载。 单向透明的内存模型 Module.buffer 无论编译目标是asm.js还是wasmC/C代码眼中的内存空间实际上对应的都是Emscripten提供的ArrayBuffer对象Module.bufferC/C内存地址与Module.buffer数组下标一一对应。 info ArrayBuffer是JavaScript中用于保存二进制数据的一维数组。在本书的语境中“Module.buffer”、“C/C内存”、“Emscripten堆”三者是等价的。 C/C代码能直接通过地址访问的数据全部在内存中包括运行时堆、运行时栈而内存对应Module.buffer对象C/C代码能直接访问的数据事实上被限制在Module.buffer内部JavaScript环境中的其他对象无法被C/C直接访问——因此我们称其为单向透明的内存模型。 在当前版本的Emscripten中指针既地址类型为int32因此单一模块的最大可用内存范围为2GB-1。未定义的情况下内存默认容量为16MB其中栈容量为5MB。 Module.HEAPX JavaScript中的ArrayBuffer无法直接访问必须通过某种类型的TypedArray方可对其进行读写。例如下列JavaScript代码创建了一个容量为12字节的ArrayBuffer并在其上创建了类型为int32的TypedArray通过该View依次向其中存入了1111111、2222222、3333333三个int32型的数 var buf new ArrayBuffer(12); var i32 new Int32Array(buf); i32[0] 1111111; i32[1] 2222222; i32[2] 3333333;tips ArrayBuffer与TypedArray的关系可以简单理解为ArrayBuffer是实际存储数据的容器在其上创建的TypedArray则是把该容器当作某种类型的数组来使用。 Emscripten已经为Module.buffer创建了常用类型的TypedArray见下表 对象TypedArray对应C数据类型Module.HEAP8Int8Arrayint8Module.HEAP16Int16Arrayint16Module.HEAP32Int32Arrayint32Module.HEAPU8Uint8Arrayuint8Module.HEAPU16Uint16Arrayuint16Module.HEAPU32Uint32Arrayuint32Module.HEAPF32Float32ArrayfloatModule.HEAPF64Float64Arraydouble 在JavaScript中访问C/C内存 我们通过一个简单的例子展示如何在JavaScript中访问C/C内存。创建C源代码mem.cc如下 //mem.cc #include stdio.hint g_int 42; double g_double 3.1415926;EM_PORT_API(int*) get_int_ptr() {return g_int; }EM_PORT_API(double*) get_double_ptr() {return g_double; }EM_PORT_API(void) print_data() {printf(C{g_int:%d}\n, g_int);printf(C{g_double:%lf}\n, g_double); }将其编译为mem.js及mem.wasm。 JavaScript部分代码如下 var int_ptr Module._get_int_ptr();var int_value Module.HEAP32[int_ptr 2];console.log(JS{int_value: int_value });var double_ptr Module._get_double_ptr();var double_value Module.HEAPF64[double_ptr 3];console.log(JS{double_value: double_value });Module.HEAP32[int_ptr 2] 13;Module.HEAPF64[double_ptr 3] 123456.789 Module._print_data();我们在JavaScript中调用了C函数get_int_ptr()获取了全局变量g_int的地址然后通过Module.HEAP32[int_ptr 2]获取了该地址对应的int32值。由于Module.HEAP32每个元素占用4字节因此int_ptr需除以4既右移2位方为正确的索引。获取g_double的方法类似不赘述。
http://www.zqtcl.cn/news/602377/

相关文章:

  • 湖南建设监理工程网站设计类招聘网站
  • 门户网站建设的平台搭建长春专业网站建设推广
  • 网站建设宗旨怎么写网站建设公司外链怎么做
  • 绍兴市交通建设检测中心网站seo专业培训网络班
  • 设计国外网站有哪些玉环在哪里做网站
  • 设计网站思路如何写wordpress 修改登录
  • 网站开发php国外设计网站app吗
  • 智能响应式网站淳安县住房和城乡建设局网站
  • 招投标网站开发企业网站建设之后
  • 如何做好集团网站建设怎么做门淘宝网站
  • 医疗协助平台网站建设方案学生个人网页制作html报告
  • 专注于网站营销服务新浪云搭建wordpress
  • 免费自助建站代理鞍山招聘网最新招聘
  • 营销型类型网站有哪些类型php网站后台制作
  • 安全的网站制作公司百度app最新版本
  • 中小企业建站平台耐克网站建设策划方案
  • wordpress 后台加入链接后_网站显示是标签_不是链接wms智能仓储管理系统
  • 网站建设需要什么硬件和软件有哪些中考网络应用服务平台
  • 为什么网站权重会掉房地产开发网站建设
  • 大连seo整站优化酷播wordpress视频插件
  • 好的网页设计网站学编程要什么学历
  • 做网站公司电话福建城乡建设网站查询
  • 郑州做网站哪个公司好做二手市场类型的网站名字
  • 网站建设与维护里面的个人简历选择网站建设公司好
  • 济南浩辰网站建设公司怎么样wordpress 3.8 问题
  • 柳州正规网站制作公司网站ww正能量
  • 网站seo优化工具网站推广策略方法
  • 企业网站建设知名wordpress 自定义php
  • 用php做的网站有哪些全能网站建设
  • 网站显示正在建设中wordpress 排行榜 页面