内存如何在Javascript中处于较低水平?

时间:2018-05-26 03:13:33

标签: javascript javascript-objects

好的,所以无论谁回答这个都是我的英雄,因为这让我在过去几天疯狂。

在对Javascript中的内存如何工作进行了大量研究之后,我从Eloquent Javascript中发现了这段我觉得有意义的但我想证实我的理解。

  

因为属性只掌握它们的值,而不是包含它,所以对象和数组存储在计算机的存储器中,作为保存地址的位序列 - 内存中的位置。因此,其中包含另一个数组的数组包含(至少)内部数组的一个内存区域和外部数组的另一个内存区域,其中包含(除其他外)表示内部数组位置的二进制数。


我接受了C编程,根据我的理解,最广泛意义上的变量是一个具有地址和值的命名内存位置。通常,当您存储基元时,构成基元值的实际比特模式(比如原始值2的10)将存储为变量的值。从这段和其他来源,我收集到,当一个变量存储一个对象时,它确实存储了一个对象的引用(地址)作为其值。我遇到问题的部分是对象的实际值存储在内存中(变量中存储的引用指向的内容),以及对象的值如何包含变量(属性)本身?

作为我所要求的类比,我们说这些代码行,每个变量都标有地址。 (注意,我意识到这些地址可能不是解释器如何存储它们,这只是一个例子)

// Address is 0xA
var number = 4; 
// Variable address is 0xB, say address of object is 0xC
var obj = {
    array: [1, 2, 3],
    literal: 3
}; 

执行此代码后,地址为0xA的内存位置应具有 100作为其值,并且具有地址0xB的存储器位置应该具有 0xC作为其值。

所以我的问题是,位置0xC的对象是否有自己的一组变量,它们有自己的值,如number和obj呢?书中的段落让我认为对象中的数组属性将有另一个内存地址作为其值,而3的位模式作为属性文字的值。如果是这种情况,则Javascript中的内存通过引用内存的其他部分来工作,并且"终止"当它达到字面值? (因为对数组的引用会导致一个对象包含所有包含文字的属性)

我意识到这可能太低了,但是如果有人能给我一个有用的思考方式,那么我可以超越它,我会非常感激。

另外,作为旁注,我正在阅读关于垃圾收集的内容,我想知道术语是否释放内存"意味着将内存位置标记为不再使用,以便可以向其写入其他信息,或者如果它与破坏这些内存位置中包含的实际值有关,或者是否与导致变量名称停止引用内存有关地址(位置),或三者的一些疯狂组合。

0 个答案:

没有答案