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

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

Вопрос

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

 

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

 

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

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

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


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

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

  • 0

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," байт.")

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


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

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

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

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


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

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

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

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


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

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

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

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

UTF-8.

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


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

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

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


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

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

UTF-8.

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

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


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

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

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

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


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

 

 

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

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


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

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

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

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


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

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

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


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

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

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

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


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

 

 

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

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


 

 

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

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

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


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

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

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

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

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


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

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

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


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

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

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

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

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


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

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

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


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

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

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

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


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

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

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


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

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

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

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

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

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

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

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

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


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