Как память работает в Javascript на низком уровне? - PullRequest
0 голосов
/ 26 мая 2018

Хорошо, так что, кто бы ни ответил на это, будет моим героем, потому что это сводило меня с ума в течение последних нескольких дней.

Проведя много исследований о том, как работает память в Javascript, я натолкнулся на этот абзац из Eloquent Javascript, который, я думаю, имеет смысл, но я хочу подтвердить свое понимание.

Поскольку свойства воспринимают только свое значение, а не содержат его, объекты и массивы хранятся в памяти компьютера как последовательности битов, содержащих адреса - место в памяти - их содержимого.Таким образом, массив с другим массивом внутри него состоит (по крайней мере) из одной области памяти для внутреннего массива и другого для внешнего массива, содержащего (среди прочего) двоичное число, которое представляет позицию внутреннего массива.


Я взял программирование на C, и, насколько я понимаю, переменная в самом широком смысле - это именованная область памяти, которая имеет адрес и значение.Обычно, когда вы сохраняете примитив, фактическая структура битов, которая составляет значение примитива (скажем, 10 для значения примитива 2), сохраняется как значение переменной.Из этого абзаца и из других источников я понял, что когда переменная хранит объект, она действительно сохраняет ссылку (адрес) объекта в качестве значения.Часть, с которой у меня возникают проблемы, - это где фактическое значение объекта хранится в памяти (на что указывает ссылка, хранящаяся в переменной), и как значение объекта содержит переменные (свойства)?

В качестве аналогии с тем, что я спрашиваю, скажем, у нас есть эти строки кода, где каждая переменная имеет помеченный адрес.(Обратите внимание, я понимаю, что эти адреса, вероятно, не соответствуют тому, как интерпретатор хранит их, это всего лишь пример)

// 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 do?Абзац из книги заставляет меня думать, что свойство массива в объекте будет иметь другой адрес памяти в качестве значения и битовый шаблон для 3 в качестве значения литерала свойства.Если это так, то работает ли память в Javascript, ссылаясь на другие части памяти и «заканчивая», когда она достигает литеральных значений?(поскольку ссылка на массив приведет к объекту, содержащему свойства, которые все содержат литералы)

Я понимаю, что это, вероятно, слишком низкий уровень, но если кто-то может дать мне полезный способ думать об этом,Я мог бы пройти мимо этого, я был бы очень признателен.

Также, в качестве примечания, я читал о сборке мусора, и мне было интересно, означает ли термин «освобождение памяти» обозначение областей памяти как неиспользуемых, так что другая информация может быть записана в нее,или если это было связано с уничтожением фактических значений, содержащихся в этих ячейках памяти, или если это было связано с тем, что имена переменных перестали ссылаться на адреса памяти (местоположения), или какой-то сумасшедшей комбинацией этих трех.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...