Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Можно ли узнать какой объем памяти занимает переменная? (https://javascript.ru/forum/misc/25896-mozhno-li-uznat-kakojj-obem-pamyati-zanimaet-peremennaya.html)

jsuse 19.02.2012 05:02

Можно ли узнать какой объем памяти занимает переменная?
 
Допустим в переменную сохраняется объект(или функция, или еще что-то, не важно). Вопрос, можно ли узнать размер того, что сохраняется в переменной. Не типа размер, как длина массива, а именно сколько байт попало в эту переменную? Допустим присваиваю так:

var bar = obj {
     one: 1;
     two: 2;
}


И как-то узнать, сколько переменная bar заняла памяти. Ну или другими словами, сколько байт оказался объект obj.

Mахmахmахimus 19.02.2012 13:00

ты наверное не знаешь что обьекты не сохраняются в переменные?
п.с. нет нельзя

Gvozd 19.02.2012 13:20

Цитата:

Сообщение от jsuse
Допустим присваиваю так:

Цитата:

Сообщение от jsuse
И как-то узнать, сколько переменная bar заняла памяти.

Нисколько

jsuse 19.02.2012 19:46

Цитата:

Сообщение от Gvozd (Сообщение 158430)
Нисколько

Почему нисколько? Из Вашего ответа получается, что любой код не занимает ни одного байта. Ведь если в нем ни одна переменная, ни одна функция, ни один объект, т.д. не занимают ни одного байта, то и итоговый файл, в который сохраняется код, должен весить 0. Но это же не так.

Nekromancer 19.02.2012 19:49

jsuse,
В памяти хранится объект.
Переменная указывает на него.
Переменная ничего не занимает в памяти.
Вес файла и размер занимаемый в памяти во время исполнения, это не одно и тоже.

Mахmахmахimus 19.02.2012 19:53

Нельзя, js не предоставляет API для работы с памятью он делает это автоматически.

Вот норм ответ.

Nekromancer 19.02.2012 20:03

Mахmахmахimus,
Аквариум, да ты ваще самый клёвый чувак. Тебе не говорили? :)

Mахmахmахimus 19.02.2012 20:08

нет

Nekromancer 19.02.2012 20:12

Mахmахmахimus,
Ай-яй-яй, плохие люди. :nono:

Mахmахmахimus 19.02.2012 20:18

ну, а зачем ты нажимаешь на ник когда мы вдвоем болтаем)?

Nekromancer 19.02.2012 20:27

Mахmахmахimus,
Так это я тебя выделяю среди всех, ага.

jsuse 19.02.2012 22:45

Цитата:

Сообщение от Mахmахmахimus (Сообщение 158504)
Нельзя, js не предоставляет API для работы с памятью он делает это автоматически.
Вот норм ответ.

Да, плюсую :)

jsuse 19.02.2012 22:49

Цитата:

Сообщение от Nekromancer (Сообщение 158502)
jsuse,
Переменная ничего не занимает в памяти.

Но это же не так. Когда я объявляю вот так переменную,
var bar = "";

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

Nekromancer 19.02.2012 23:06

jsuse,
В памяти лежит не переменная, а строка, если уж абстрактно брать.

melky 19.02.2012 23:12

Посмотреть, сколько памяти кто-чего у занял, можно в консоли хрома.

http://code.google.com/chrome/devtoo...profiling.html

Желаю Вам удачи.

devote 20.02.2012 12:09

переменная указывающая на любой объект занимает 4-8 байт, в зависимости от системы. Остальное считаем по просту:
текстовые данные, хранят двумя видами, первые 2-4 байта размер строки, далее строка. Либо строка и вконце строки нулевой символ указывающий на конец строки. Числовые переменные зависит от типа числа, в JS везде помойму сплошной FLOAT 8-16 байт, булевые значения 1 байт.
Примерно все так... хотя по JS я особо не интересовался, но если смотреть на более низком уровне то где-то так.

Gozar 20.02.2012 12:47

jsuse, не скажешь зачем тебе это узнавать? Может есть более лучший способ решить проблему, если она есть конечно.

Раед 15.04.2012 00:59

Цитата:

Сообщение от devote
булевые значения 1 байт.

Всю жизнь думал, что 1 бит :D

bes 15.04.2012 17:45

Насколько я понимаю, переменная является лишь одним из способов работы с памятью, в которой собственно и хранятся данные (абстрактно, переменная - это именованный контейнер для хранения данных).

Для каждого языка программирования определён список простых типов данных и размер этих типов (то какой размер памяти будут занимать значения этих типов).
Размер переменной, хранящей в конкретный момент времени данные простого типа (например, число) как раз равен размеру типа этих данных (обычно это подразумевают под размером переменной с простым значением).

Для сложных типов данных (например, объектов) часто используют ссылочную организацию: представляющая сложные данные переменная хранит лишь ссылку на эти данные, а о том как размещаются в памяти сами данные (например, свойства и методы объекта) и то, каким образом разрешать ссылки, заботится интерпретатор.
Размер таких переменных равен размеру ссылочного типа данных, представляющих в языке ссылки (сколько памяти отводится под ссылки в javascript точно не знаю, но обычно достаточно 4 байт (2^32 - это более 4*10^9 возможных адресов)).
Так как размер переменных с такими данными - это всего лишь размер ссылки, то для таких типов данных обычно существуют функции получения размера самих структур.

Так javascript - это не универсальный (как, например, С++, Delphi и т.п.), а специализированный язык, то и средств для реализации универсальности в нём не так много (хотя в последующих версиях языка ничто не мешает их добавить).

Раед 16.04.2012 16:15

Цитата:

Сообщение от bes
средств для реализации универсальности

ЧТо вы понимаете под универсальностью?

bes 17.04.2012 08:49

Цитата:

Сообщение от Раед
ЧТо вы понимаете под универсальностью?

Имеется в виду, что на программном уровне с компьютером можно делать всё что угодно (хотя бы в рамках того, что позволяет операционная система).
Но, в большинстве случаев, в случае с javascript этого и не требуется, так как у javascript другое (специализированное) назначение.

Раед 17.04.2012 16:52

Цитата:

Сообщение от bes
хотя в последующих версиях языка ничто не мешает их добавить

Цитата:

Сообщение от bes
в случае с javascript этого и не требуется

bes,
Вы сами себе противоречите :)

bes 18.04.2012 16:24

Цитата:

Сообщение от Раед
Вы сами себе противоречите

Никаких противоречий, Раед, добавление новых возможностей в javascript итак постоянно происходит.
Кроме того, ничто не мешает сделать на основе javascript среду разработки, не хуже таких как, например, C++Builder или Delphi.
В случае с javascript этого не требуется в большинстве случаев только потому, что javascript используется в этом большинстве случаев со специализированной целью (сделать интерактивными веб-страницы).

bes 05.04.2016 08:56

Цитата:

Сообщение от bes
Последний раз редактировалось bes, 18.04.2012 в 15:31.

первый выпуск node.js кстати ещё в 2009 был :)


Часовой пояс GMT +3, время: 06:32.