Перейти к содержимому
  • 0
Hello

Объем перменной

Вопрос

А как определить, сколько занимает места в памяти перменная?

 

Со строкам уже разобрался: #string*<объем одного символа, если не ASII> --Спасибо, NEO

 

Со строкам тоже уже разобрался: 4 байта --Спасибо, Fingercomp

Изменено пользователем Hello

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения


computer=require("computer")
freememory1=0
freememory2=0
n=10000
for i=1,10 do
freememory1=freememory1+computer.freeMemory()
os.sleep(0.5)
end
freememory1=freememory1 / 10 --определяем свободную память до объявления массива boolean

bool={} --объявляем массив
for i=1,n do -- и заполняем его значениями
bool[i]=true
end

for i=1,10 do
freememory2=freememory2+computer.freeMemory()
os.sleep(0.5)
end
freememory2=freememory2 / 10 --определяем свободную память после объявления массива boolean

print("Одна переменная типа boolean занимает ",(freememory1-freememory2)/n," байт.")

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно записать переменную в файл или замерить объем занятой памяти, присвоить значение переменной, опять замерить объем занятой памяти, вычесть разницу.

А вообще, лучше погуглить типы переменных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нигде не нашел для boolean. Какой у него объем?

И еще узнал, что есть множество вариантом кодировки Unicode, какая из них используется в OC?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нигде не нашел для boolean. Какой у него объем?

И еще узнал, что есть множество вариантом кодировки Unicode, какая из них используется в OC?

true/false — два сосотяния, по идее, 1 бит.

UTF-8.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Zer0Galaxy, великолепно. Когда прямого решения нет, на помощь приходит статистика.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

true/false — два сосотяния, по идее, 1 бит.

UTF-8.

В компьютере нет указателя на бит, обычно такие типы данных занимают 1 байт, но в Lua может и больше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А разве ключи таблицы не будут есть эдак раз в пятьдесят (а то и больше) памяти? По сути ведь тут она и есть. Это погрешность недопустимая, я полагаю.

Гугл определённого ответа не даёт. Не знаю, как там что обстоит, но вот в модемах false/true/nil занимают 4 байта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

А разве ключи таблицы не будут есть эдак раз в пятьдесят (а то и больше) памяти? По сути ведь тут она и есть. Это погрешность недопустимая, я полагаю.
Ну, думаю, объем занимаемый скалярной переменной тоже будет складываться не только из бита/байта, но и как минимум, из имени переменной. В общем, каждый конкретный случай может быть уникальным.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну, думаю, объем занимаемый скалярной переменной тоже будет складываться не только из бита/байта, но и как минимум, из имени переменной.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это в паскале или С так. А в Луа любая переменная - это значение в таблице окружения, а имя переменной - ключ этого значения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это в паскале или С так. А в Луа любая переменная - это значение в таблице окружения, а имя переменной - ключ этого значения.

А локальные переменные? Мне кажется они по-другому устроены, они же не являются ключами таблицы, соответственно их имени во время исполнения программы не существует, наверное.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

соответственно их имени во время исполнения программы не существует, наверное.

Как такое может быть в интерпритируемом языке? Максимум эти имена будут приведены к виду v1,v2.


 

 

Гугл определённого ответа не даёт. Не знаю, как там что обстоит, но вот в модемах false/true/nil занимают 4 байта.

Мне для этого и нужно было, правда, вы опоздали немного сответом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как такое может быть в интерпритируемом языке? Максимум эти имена будут приведены к виду v1,v2.

Вы не веруете в Lua байт код?  :giggle:

На сомом деле Lua - компилируемый язык, который компилируется каждый раз перед исполнением программы, далее Lua интерпретирует его. Также он может запускать уже готовый байт код (но в OC это надо включить в конфигах). Это всё избавляет от необходимости использовать имена переменных для исполнения самого кода.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если бы lua компилировался, то он бы замечал ошибки типа: print(unresolvedReference.field), во время компиляции, а не во время исполнения. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если бы lua компилировался, то он бы замечал ошибки типа: print(unresolvedReference.field), во время компиляции, а не во время исполнения. 

А где здесь ошибка?

Компилируется язык не до машинного кода (с Lua такое не возможно), а до байт кода. Называется это JIT-компиляция. Да что я тут распинаюсь, даже на Википедии об этом сказано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну так байт-код то интерпритируется...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну так байт-код то интерпритируется...

А я говорил что-то против? Я просто имел в виду, что Lua не использует названия локальных переменных для доступа к их значениям. Следовательно даже никакого v1 и v2 там нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вы меня убедили, локальные переменные види лишь изнутри функции, значит, там достаточно указателей в реализации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...