内存管理技术的具体实现介绍

栏目: C · 发布时间: 5年前

要理解为什么将ArrayBuffer和SharedArrayBuffer添加到JavaScript中,你需要了解一些关于内存管理的内容。

你可以将设备中的内存看作一堆盒子,这么说吧,就像你的邮箱或储蓄抽屉。

如果你由于某些目的,需要留下一些东西,你可以把它放在这个抽屉里。

内存管理技术的具体实现介绍

在每一抽屉旁边,都会标记一个数字,这是一个内存地址,就相当于你告诉某人在哪里可以找到你为他们留下的东西。

其中这些盒子中的每一个的尺寸大小都是相同的,并且可以容纳一定量的信息。盒子的尺寸是则根据设备而异。这个大小就被称为字大小,它通常是32位或64位。但是为了使其更容易显示,我将使用8位的字大小。

内存管理技术的具体实现介绍

如果我们想把数字2放在这些盒子之一,我们可以很容易地做到这一点。数字很容易用二进制表示。

内存管理技术的具体实现介绍

如果我们想要的东西不是数字怎么办?用字母可以吗?

所以,我们需要用一种方法来代表我们要表示的内容。为了做到这一点,我们就需要一种编码,像UTF-8。我们需要一些 工具 比如一个编码器环(encoder ring)把它变成类似于UTF-8的形式,然后我们才可以存储它。

内存管理技术的具体实现介绍

当我们想让它开箱即用时,我们必须将其通过解码器翻译过来。

自动内存管理

当你在使用JavaScript时,实际上并不需要考虑这个内存。由于它已被单独进行处理,所以这意味着你不要直接触摸内存。

相反,JS引擎会充当中介的角色,为你管理内存。

内存管理技术的具体实现介绍

所以让我们介绍一些JS代码,如React,以方便创建一个变量。

内存管理技术的具体实现介绍

JS引擎的作用是通过编码器运行该值以获得值的二进制表示。

内存管理技术的具体实现介绍

它将在内存中找到可以将二进制表示放入的空间。这个过程称为分配内存。

内存管理技术的具体实现介绍

然后,引擎将跟踪该变量,看其是否仍然可以从程序中的任何地方访问。如果该变量无法再到达,则内存将被回收,以便JS引擎可以将新值放在那里。

内存管理技术的具体实现介绍

这个观察变量字符串,对象和其他类型的内存值的过程称为垃圾收集。像JavaScript这样不直接处理内存的语言的代码被称为内存管理语言。

这种自动内存管理虽然可以使开发人员更轻松,但它也增加了一些运行内耗,而这种内耗有时会使性能不可预测。

手动内存管理

手动管理内存的语言则与自动内存管理不同,例如,我们来看看React如何使用 C语言 写入内存(现在可以通过WebAssembly来实现)。

C语言没有JavaScript在内存上的抽象层,而是直接在内存上运行。你既可以从内存加载东西,也可以将内容存储到内存中。

内存管理技术的具体实现介绍

当你将C语言或其他语言编译到WebAssembly时,你使用的工具将在WebAssembly中添加一些帮助程序代码。例如,它会添加编码和解码字节的代码。该代码就被称为运行时的环境。运行时的环境将帮助处理JS引擎所做的一些事情。

内存管理技术的具体实现介绍

但是对于手动管理的语言来说,该运行时将不包括垃圾回收。

即使在手动内存管理的语言中,通常会从语言运行时获得一些帮助。例如,在C语言中,运行时将跟踪哪些内存地址会在空闲列表中打开。

内存管理技术的具体实现介绍

你可以使用函数malloc(内存分配的简写)来要求运行时找到一些可以适应数据的内存地址,并将这些地址从免费列表中删除。完成这些数据后,你必须随意释放内存。那么这些地址将被添加回免费列表。

你必须弄清楚何时调用这些函数,这就是为什么它被称为手动内存管理,即你自己管理内存。

作为一名开发人员,弄清楚何时清除不同部分的内存可能很难。如果你在错误的时间进行操作,可能会导致错误,甚至导致安全漏洞。如果你不这样做,你的内存就会耗尽。

这就是为什么许多现代语言会使用自动内存管理的原因,就是为了避免人为错误。但这是以性能为代价的,我将在下一篇文章中为你进一步解释这一点。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网络空间导论

网络空间导论

李良荣、方师师 / 复旦大学出版社 / 2018-6-1 / 38

在互联网蓬勃发展的今天,新闻传播学科该往何处去?在长达半个多世纪的深入研究后,李良荣教授及其团队给出了答案:从“小新闻”走向“大传播”,并撰写了这本开创性的教材:《网络空间导论》。 在本书中,互联网被定义为“空间”——持续演进的数字化现实。为了深刻把握网络空间的内涵,本书提供了六个维度的观察:技术应用、组织架构、政治经济、媒介文化、网络素养、安全治理,并以大胆且富有建设性的观点重新定义了新闻......一起来看看 《网络空间导论》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具