Когда объект сохраняется в памяти, значение сохраняется только или оно сохраняется как объект?

1

Когда значение сохраняется в памяти, я понимаю, что само значение сохраняется в памяти, но когда дело доходит до объектов, как оно хранится в памяти?

  • 5
    В конце концов, все это просто набор битов и байтов. Можете ли вы быть более конкретным о том, что вы хотите знать?
  • 0
    Хотя это статья о производительности, она охватывает некоторые детали того, как браузеры хранят объекты на уровне кода C ++, если это поможет. Developer.mozilla.org/en-US/docs/Web/JavaScript/…
Показать ещё 4 комментария
Теги:

2 ответа

1
Лучший ответ

Ниже приведена хорошая идея о том, как объекты хранятся в памяти:

Большинство объектов содержат все свои свойства в одном блоке памяти ("a" и "b"). Все блоки памяти имеют указатель на карту, которая описывает их структуру. Именованные свойства, которые не помещаются в объект, обычно хранятся в массиве переполнения ("c" и "d"). Нумерованные свойства хранятся отдельно, обычно в смежном массиве.

Подробнее читайте здесь.

  • 0
    Этой статье пять лет. Интересно, это все еще актуально?
  • 0
    @torazaburo Да, правда. Но я думаю, основная структура памяти не сильно изменится.
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...
функция drawSquare (Square s) {.. код для рисования}

Квадрат явно хранится в памяти с его значениями.

Теперь объектно-ориентированный язык, такой как 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...}
}

И ты делаешь это так...
Площадь s = новая площадь (10,10,20,20);

Где-то за кулисами выполняется malloc и задания. Но s - объект в этом случае, потому что реализованная квадратная "структура" в памяти связана с кодом в классе Square.

  • 0
    Но неясно, как это относится к JavaScript.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню