当一个对象存储在内存中时,该值是仅存储还是存储为对象?

时间:2017-09-12 03:52:00

标签: javascript

当一个值存储在内存中时,我知道值本身会存储在内存中,但是当涉及到对象时,它是如何存储在内存中的?

2 个答案:

答案 0 :(得分:1)

以下是对象如何存储在内存中的好主意:

  

大多数对象在单个内存块中包含其所有属性   (“a”和“b”)。所有内存块都有一个指向地图的指针   描述他们的结构。命名属性不适合   对象通常存储在溢出数组(“c”和“d”)中。   编号属性分开存储,通常是连续的   阵列。

更多阅读here

答案 1 :(得分:0)

对象的类成员变量的值存储在内存中。这些值作为一个组与代码块相关联,该代码块是创建对象的类。对象只是与设计用于对其进行操作的一组特定函数调用相关联的数据。

考虑像C这样的基于函数的语言。你可能会做这样的事情。

struct Square (  
    int upperX;  
    int upperY;  
    int lowerX;  
    int lowerY;  
}  

显然我们在这里将一个正方形存储在内存中......

Square s = malloc (sizeof(Square) );  
s->upperX = 10;
s->upperY = 10;
s->lowerX = 20;
s->lowerY = 20;

这是一些在Square上运行的代码......它需要一个块 内存是Square结构...
    function drawSquare(Square s){..要绘制的代码}

Square显然以其值存储在内存中。

现在,面向对象的语言(如C ++或Java)在幕后扮演技巧,它们完全相同。但代码看起来更像是......

class Square {
    private int upperX;
    private int upperY;
    private int lowerX;
    private int lowerY;
    // Create and return an object
    public Square (int x1, int y1, int x2, int y2) {code to set members}
    // Draw a square
    public draw () {code to draw...}
}

你做一个这样的....
    Square s = new Square(10,10,20,20);

在幕后的某个地方完成了malloc和任务。但在这种情况下,s是一个对象,因为内存中实现的Square“struct”与Square类中的代码相关联。