亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

[譯]WebAssembly 中的 Memory

junnplus / 1875人閱讀

摘要:使用,您可以直接訪問原始字節(jié)碼這可能令人擔(dān)憂。可以根據(jù)索引從中拿到字符串現(xiàn)在,很多人并不知道如何在中使用字節(jié)碼。你需要將字節(jié)碼轉(zhuǎn)換為有用的內(nèi)容,比如說字符串。通過防止瀏覽器級(jí)內(nèi)存泄漏并提供內(nèi)存隔離,使事情變得更安全。

原文鏈接:https://fanmingfei.com/posts/...

這是系列文章第二篇:

使用 JavaScript 創(chuàng)建一個(gè) WebAssembly 模塊的實(shí)例。

WebAssembly 中的 Memory

什么是 WebAssembly table?

WebAssembly中的內(nèi)存與JavaScript中的內(nèi)存有所不同。使用WebAssembly,您可以直接訪問原始字節(jié)碼...這可能令人擔(dān)憂。但是,它的確比你想象中的要安全。

什么是 memory 對(duì)象?

當(dāng) WebAssembly 模塊被實(shí)例化時(shí),它需要一個(gè) memory 對(duì)象。你可以創(chuàng)建一個(gè)新的WebAssembly.Memory并傳遞該對(duì)象。如果沒有創(chuàng)建 memory 對(duì)象,在模塊實(shí)例化的時(shí)候?qū)?huì)自動(dòng)創(chuàng)建,并且傳遞給實(shí)例。

JS引擎創(chuàng)建一個(gè)ArrayBuffer(我在另一篇文章中解釋)來做這件事情。ArrayBuffer 是 JS 引用的 JavaScript 對(duì)象。JS 為你分配內(nèi)存。你告訴它需要多少內(nèi)存,它會(huì)創(chuàng)建一個(gè)對(duì)應(yīng)大小的ArrayBuffer。

數(shù)組的索引可以視為內(nèi)存地址。如果你需要增加它的內(nèi)存,你可以使用 grow 方法讓數(shù)組變大。

ArrayBuffer 做了兩件事情,一件是做 WebAssembly 的內(nèi)存,另外一件是做 JavaScript 的對(duì)象。

它使 JS 和 WebAssembly 之間傳遞內(nèi)容更方便。

使內(nèi)存管理更安全。

JS 和 WebAssembly 之間傳值

因?yàn)?ArrayBuffer 是一個(gè) JavaScript 對(duì)象,這意味著 JavaScript 也可以獲取到這個(gè) memory 中的字節(jié)。所以通過這種方式, WebAssembly 和 JavaScript 可以共享內(nèi)存,并且相互傳值。

使用數(shù)組索引來訪問每個(gè)字節(jié),而不是使用內(nèi)存地址。

比如,WebAssembly 想將一個(gè)字符串寫入內(nèi)存。它需要將字符串轉(zhuǎn)換成字節(jié)碼。

然后把這些字節(jié)碼放進(jìn)數(shù)組。

然后將字符串所在的內(nèi)存位置的第一個(gè)位置,也就是數(shù)組的某個(gè)索引,傳遞給 JavaScript。JavaScript 可以根據(jù)索引從 ArrayBuffer 中拿到字符串

現(xiàn)在,很多人并不知道如何在 JavaScript 中使用字節(jié)碼。你需要將字節(jié)碼轉(zhuǎn)換為有用的內(nèi)容,比如說字符串。

在一些瀏覽器中,你可以使用TextDecoder和TextEncoderAPI來處理。或者你可以在你的js文件里添加一些幫助函數(shù)。比如,Emscripten就可以幫你添加編碼和解碼的方法。

所以,WebAssembly memory 最好的地方就是它是一個(gè) JS 對(duì)象。WebAssembly 和 JavaScript 可以直接使用 memory 互相傳值。

讓 memory 存取更安全

另外一個(gè)好處是,WebAssembly memory 只是一個(gè) JavaScript 對(duì)象:安全。通過防止瀏覽器級(jí)內(nèi)存泄漏并提供內(nèi)存隔離,使事情變得更安全。

內(nèi)存泄漏

正如我在內(nèi)存管理的文章中提到的,當(dāng)你管理自己的內(nèi)存時(shí),你可能會(huì)忘記清除它。這可能導(dǎo)致系統(tǒng)內(nèi)存不足。

如果 WebAssembly 模塊實(shí)例直接訪問內(nèi)存,并且如果在超出范圍之前忘記清除該內(nèi)存,那么瀏覽器可能會(huì)泄漏內(nèi)存。

因?yàn)閮?nèi)存對(duì)象只是一個(gè)JavaScript對(duì)象,所以它本身就被垃圾回收器跟蹤(盡管它的內(nèi)容不會(huì)垃圾回收)。

也就是說,WebAssembly 實(shí)例被移除以后,所有的內(nèi)存數(shù)組將會(huì)被回收。

內(nèi)存隔離

當(dāng)人們聽到WebAssembly讓你直接訪問內(nèi)存時(shí),他們可能有點(diǎn)緊張。他們認(rèn)為,一個(gè)惡意的 WebAssembly 模塊可能會(huì)進(jìn)入并在內(nèi)存中干壞事,這是絕對(duì)不允許的。但事實(shí)并非如此。

ArrayBuffer 提供了邊界。WebAssembly 模塊可以直接管理的內(nèi)存是受限制的。

它可以直接管理該數(shù)組內(nèi)部的字節(jié),但它看不到任何超出此數(shù)組范圍的內(nèi)容。

例如,內(nèi)存中的任何其它 JS 對(duì)象,如 window 對(duì)象,WebAssembly無法訪問。這對(duì)安全性非常重要。

每當(dāng) WebAssembly 中有操作內(nèi)存時(shí),引擎會(huì)進(jìn)行數(shù)組限制檢查,以確保該地址位于 WebAssembly 實(shí)例的內(nèi)存中。

如果代碼嘗試訪問超出范圍的地址,引擎將拋出異常。這保護(hù)了其它的內(nèi)存。

所以這就是 memory 相關(guān)的內(nèi)容。在下一篇文章中,我們將看研究一些關(guān)于安全性的其它類型的 import 數(shù)據(jù):table import。

About

Lin Clark

Lin 是Mozilla Developer Relations團(tuán)隊(duì)的工程師。她使用 JavaScript、WebAssembly、Rust 和 Servo,也畫一些漫畫。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/84511.html

相關(guān)文章

  • []使用JavaScript創(chuàng)建一個(gè)WebAssembly模塊的實(shí)例

    摘要:原文鏈接這是系列文章第一篇使用創(chuàng)建一個(gè)模塊的實(shí)例。將會(huì)創(chuàng)建模塊的實(shí)例。一旦模塊實(shí)例化完成,主進(jìn)程就會(huì)拿到返回的實(shí)例。如果創(chuàng)建一個(gè)實(shí)例,你還需要其它的參數(shù)。使用這些低級(jí)裝備這些來構(gòu)建實(shí)例。模塊本身沒有任何狀態(tài)。 原文鏈接:https://fanmingfei.com/posts/... 這是系列文章第一篇: 使用 JavaScript 創(chuàng)建一個(gè) WebAssembly 模塊的實(shí)例。 W...

    elarity 評(píng)論0 收藏0
  • []什么是 WebAssembly table imports?

    摘要:中的什么是在第一篇文章中,我介紹了可以導(dǎo)入的四中不同的類型??赡苁且阅撤N方式插入到內(nèi)存中的惡意代碼,可能嵌入到字符串中。是存在于內(nèi)存之外的數(shù)組。如果模塊想要調(diào)用這些函數(shù),它將該索引傳遞給一個(gè)名為的操作。 原文鏈接: https://fanmingfei.com/posts/... 這是系列文章第三篇: 使用 JavaScript 創(chuàng)建一個(gè) WebAssembly 模塊的實(shí)例。 Web...

    Java_oldboy 評(píng)論0 收藏0
  • WebAssembly 初嘗

    摘要:在當(dāng)前階段,僅僅只是字節(jié)碼規(guī)范。如果都沒有將代碼編譯為字節(jié)碼的工具,要起步就很困難了。接下來要做的是使用將格式的代碼轉(zhuǎn)換為二進(jìn)制碼。運(yùn)行文件,最后就能得到瀏覽器需要的真正的二進(jìn)制碼。 本文轉(zhuǎn)載自:眾成翻譯譯者:文藺鏈接:http://www.zcfy.cc/article/1031原文:http://cultureofdevelopment.com/blog/build-your-fi...

    anonymoussf 評(píng)論0 收藏0
  • 」內(nèi)存管理碰撞課程

    摘要:你可以從內(nèi)存中直接拿東西,也可以直接往內(nèi)存里存東西當(dāng)你把或者其它語言編譯為時(shí),編譯工具會(huì)在里增加一些輔助代碼。 作者:Lin Clark 譯者:Cody Chan 原帖鏈接:A crash course in memory management 這是圖解 SharedArrayBuffers 系列的第一篇: 內(nèi)存管理碰撞課程 圖解 ArrayBuffers 和 SharedA...

    BDEEFE 評(píng)論0 收藏0
  • 2017-07-22 前端日?qǐng)?bào)

    摘要:前端日?qǐng)?bào)精選任何網(wǎng)站都可以變成但我們需要做得更好譯高性能個(gè)新工具加速你的應(yīng)用在生產(chǎn)環(huán)境中使用記錄日志手把手教你用開發(fā)一個(gè)發(fā)布中文譯繼承實(shí)例譯基于背后的合理化,而非設(shè)計(jì)掘金實(shí)現(xiàn)哪家強(qiáng)中的眾成翻譯快速入門個(gè)人文章一個(gè)基于區(qū)塊鏈的深網(wǎng) 2017-07-22 前端日?qǐng)?bào) 精選 任何網(wǎng)站都可以變成 PWA —— 但我們需要做得更好[譯] 高性能 React:3 個(gè)新工具加速你的應(yīng)用在生產(chǎn)環(huán)境中使用...

    endless_road 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<