成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

翻譯 | 帶你秒懂內(nèi)存管理 - 第一部(共三部)

Tecode / 912人閱讀

摘要:自動內(nèi)存管理當(dāng)你在使用時,實際上并不需要考慮內(nèi)存。這種自動內(nèi)存管理可以使開發(fā)人員更輕松。即使在手動內(nèi)存管理的語言中,通常會從語言運行時獲得一些幫助。這就是為什么許多現(xiàn)代語言使用自動內(nèi)存管理的原因避免人為錯誤。

原文地址:A crash course in memory management

原文作者:Lin Clark

譯者:黑黑

校對者:Bob

要理解為什么將 ArrayBuffer 和 SharedArrayBuffer 添加到 JavaScript 中,你需要了解一些關(guān)于內(nèi)存管理的內(nèi)容。

你可以將機器中的內(nèi)存看作一堆盒子。就像你在辦公室里的郵箱,或是小孩子們使用的收納箱。

如果你想要為其他孩子留下一些東西,你可以把它放在一個盒子里。

在每個盒子旁邊都有一個數(shù)字,這些數(shù)字就是內(nèi)存地址,用來告訴別人在哪里找到你留給他們的東西。

這些盒子中的每一個都具有相同的尺寸,并且可以容納一定量的信息。盒子的尺寸取決于機器。這個大小稱為字長。它通常是32位或64位。但是為了顯示方便,這里我們使用8位字長。

如果我們想把數(shù)字2放在其中一個盒子中,我們可以很容易地做到這一點。數(shù)字很容易轉(zhuǎn)換成二進制。

如果我們想要的東西不是數(shù)字怎么辦?比如字母 H?

我們需要一個類似UTF-8的編碼來用數(shù)字代替這些東西。而為了把這些東西轉(zhuǎn)換成數(shù)字,我們需要一個類似編碼器環(huán)的工具。之后我們就可以存儲它了。

當(dāng)我們想把它從盒子里拿出來的時候,必須通過解碼器把它轉(zhuǎn)換回 H。

自動內(nèi)存管理

當(dāng)你在使用 JavaScript 時,實際上并不需要考慮內(nèi)存。內(nèi)存被抽象出來,你不會直接接觸到它。

取而代之的是 JS 引擎充當(dāng)中介,為你管理內(nèi)存。

比如說有一段 JS 代碼用來創(chuàng)建一個變量(假設(shè)該 JS 代碼使用了 React)。

JS 引擎利用編碼器把該值轉(zhuǎn)換成二進制。

它將在內(nèi)存中找到可以容納該二進制的空間,這個過程稱為分配內(nèi)存。

然后,引擎將跟蹤該變量是否仍然可以從程序中的任何地方訪問。如果該變量無法再訪問,以便 JS 引擎可以在回收的內(nèi)存中存放新的值。

這種在內(nèi)存中監(jiān)控變量(字符串、對象或其他類型)并釋放掉不再使用的變量所占用的內(nèi)存的過程,稱為垃圾回收。

像 JavaScript 這樣不直接處理內(nèi)存的語言被稱為內(nèi)存管理語言。

這種自動內(nèi)存管理可以使開發(fā)人員更輕松。但它也增加了一些開銷,而這種開銷有時會使性能不可預(yù)測。

手動內(nèi)存管理

和自動管理內(nèi)存的語言相比,需要手動管理內(nèi)存的語言有些不同。例如,我們來看看 React 如何使用 C 語言寫入內(nèi)存(現(xiàn)在可以通過WebAssembly來實現(xiàn))。

C 語言沒有 JavaScript 在內(nèi)存上的抽象層。而是直接在內(nèi)存上運行。你可以從內(nèi)存加載東西,也可以將內(nèi)容存儲到內(nèi)存中。

當(dāng)你將 C 語言或其他語言編譯到 WebAssembly 時,你使用的工具將在 WebAssembly 中添加一些輔助代碼。例如,它會添加用于編碼和解碼字節(jié)的代碼。這些代碼稱為運行環(huán)境。運行環(huán)境會處理一些本該 JS 引擎做的事情。

但是對于手動管理的語言,其運行時將不包括垃圾回收。

這并不意味著你完全要自己處理。即使在手動內(nèi)存管理的語言中,通常會從語言運行時獲得一些幫助。例如,在 C 語言中,運行時會把哪些內(nèi)存地址可用記錄在一張表中,這張表叫做空閑列表。

你可以使用函數(shù) malloc (內(nèi)存分配的簡寫)來申請一些可以容納數(shù)據(jù)的內(nèi)存地址。這將把這些地址從空閑列表中拿走。當(dāng)你處理完這些數(shù)據(jù)后,你須調(diào)用函數(shù) free 釋放掉由 malloc 函數(shù)申請的內(nèi)存。之后,這些地址將被添加回空閑列表。

你必須弄清楚何時調(diào)用這些函數(shù)。這就是為什么它被稱為手動內(nèi)存管理——你得自己管理內(nèi)存。

作為一名開發(fā)人員,弄清楚何時清除不同部分的內(nèi)存可能很難。如果你在錯誤的時間進行操作,可能會出現(xiàn)bug,甚至導(dǎo)致安全漏洞。如果你不這樣做,你的內(nèi)存就會耗盡。

這就是為什么許多現(xiàn)代語言使用自動內(nèi)存管理的原因——避免人為錯誤。但這是以性能為代價的。 我將在下一篇文章中更多地解釋這一點。

iKcamp原創(chuàng)新書《移動Web前端高效開發(fā)實戰(zhàn)》已在亞馬遜、京東、當(dāng)當(dāng)開售。

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/88553.html

相關(guān)文章

  • 【回顧九月份第二周】 前端你該知道的事兒

    摘要:順便一說,這首歌的原唱是秋田,中島當(dāng)年嗓子壞了,才有這歌。中文是直接翻譯來的,作曲是秋田。一部電影春夏秋冬又一春春夏秋冬又一春是由金基德執(zhí)導(dǎo),金英民吳英秀金基德主演的一部韓國電影。年月日于韓國上映。 原鏈接: http://bluezhan.me/weekly/#/9-2 1、web前端 Angular vs. React vs. Vue: A 2017 comparison 9 S...

    sixgo 評論0 收藏0
  • 【回顧九月份第二周】 前端你該知道的事兒

    摘要:順便一說,這首歌的原唱是秋田,中島當(dāng)年嗓子壞了,才有這歌。中文是直接翻譯來的,作曲是秋田。一部電影春夏秋冬又一春春夏秋冬又一春是由金基德執(zhí)導(dǎo),金英民吳英秀金基德主演的一部韓國電影。年月日于韓國上映。 原鏈接: http://bluezhan.me/weekly/#/9-2 1、web前端 Angular vs. React vs. Vue: A 2017 comparison 9 S...

    levius 評論0 收藏0
  • 2017-07-19 前端日報

    摘要:前端日報精選開發(fā)常見問題集錦前端碼農(nóng)的自我修養(yǎng)虛擬內(nèi)部是如何工作的譯知乎專欄并不慢,只是你使用姿勢不對一份優(yōu)化指南掘金老司機帶你秒懂內(nèi)存管理第一部中文免費公開課前端面試的大關(guān)鍵點,你到了嗎知乎專欄高效開發(fā)與設(shè)計姐的圖片二三 2017-07-19 前端日報 精選 VueJS 開發(fā)常見問題集錦 - 前端碼農(nóng)的自我修養(yǎng) - SegmentFault虛擬 DOM 內(nèi)部是如何工作的?[譯]Hig...

    iflove 評論0 收藏0
  • 小白看過來 讓Python爬蟲成為你的好幫手

    摘要:小白看過來讓爬蟲成為你的好幫手隨著信息化社會的到來,人們對網(wǎng)絡(luò)爬蟲這個詞已經(jīng)不再陌生?;踊顒雨P(guān)于華為云微認(rèn)證的任何問題,均可在下方評論區(qū)留言。華為云微認(rèn)證每期將送出個免費機會,獎項公布時間月日。 小白看過來 讓Python爬蟲成為你的好幫手 隨著信息化社會的到來,人們對網(wǎng)絡(luò)爬蟲這個詞已經(jīng)不再陌生。但什么是爬蟲,如何利用爬蟲為自己服務(wù),這聽起來有些高大上。下面一文帶你走近爬蟲世界,讓即...

    darcrand 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<