Hello 125 Опубликовано: 7 февраля, 2016 (изменено) А как определить, сколько занимает места в памяти перменная? Со строкам уже разобрался: #string*<объем одного символа, если не ASII> --Спасибо, NEO Со строкам тоже уже разобрался: 4 байта --Спасибо, Fingercomp Изменено 8 февраля, 2016 пользователем Hello Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 8 февраля, 2016 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," байт.") 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob 2 750 Опубликовано: 7 февраля, 2016 Можно записать переменную в файл или замерить объем занятой памяти, присвоить значение переменной, опять замерить объем занятой памяти, вычесть разницу. А вообще, лучше погуглить типы переменных. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Hello Автор вопроса 125 Опубликовано: 8 февраля, 2016 Нигде не нашел для boolean. Какой у него объем? И еще узнал, что есть множество вариантом кодировки Unicode, какая из них используется в OC? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 410 Опубликовано: 8 февраля, 2016 Нигде не нашел для boolean. Какой у него объем? И еще узнал, что есть множество вариантом кодировки Unicode, какая из них используется в OC? true/false — два сосотяния, по идее, 1 бит. UTF-8. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 8 февраля, 2016 Zer0Galaxy, великолепно. Когда прямого решения нет, на помощь приходит статистика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Ktlo 789 Опубликовано: 8 февраля, 2016 true/false — два сосотяния, по идее, 1 бит. UTF-8. В компьютере нет указателя на бит, обычно такие типы данных занимают 1 байт, но в Lua может и больше. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 410 Опубликовано: 8 февраля, 2016 А разве ключи таблицы не будут есть эдак раз в пятьдесят (а то и больше) памяти? По сути ведь тут она и есть. Это погрешность недопустимая, я полагаю. Гугл определённого ответа не даёт. Не знаю, как там что обстоит, но вот в модемах false/true/nil занимают 4 байта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 8 февраля, 2016 А разве ключи таблицы не будут есть эдак раз в пятьдесят (а то и больше) памяти? По сути ведь тут она и есть. Это погрешность недопустимая, я полагаю. Ну, думаю, объем занимаемый скалярной переменной тоже будет складываться не только из бита/байта, но и как минимум, из имени переменной. В общем, каждый конкретный случай может быть уникальным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 410 Опубликовано: 8 февраля, 2016 Ну, думаю, объем занимаемый скалярной переменной тоже будет складываться не только из бита/байта, но и как минимум, из имени переменной. А имя переменной вроде не влияет. Насколько я знаю, просто создаётся объект в памяти, делается указатель. И в программе будет уже он использоваться, где указано это "имя". 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 8 февраля, 2016 Это в паскале или С так. А в Луа любая переменная - это значение в таблице окружения, а имя переменной - ключ этого значения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Ktlo 789 Опубликовано: 8 февраля, 2016 Это в паскале или С так. А в Луа любая переменная - это значение в таблице окружения, а имя переменной - ключ этого значения. А локальные переменные? Мне кажется они по-другому устроены, они же не являются ключами таблицы, соответственно их имени во время исполнения программы не существует, наверное. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Hello Автор вопроса 125 Опубликовано: 8 февраля, 2016 соответственно их имени во время исполнения программы не существует, наверное. Как такое может быть в интерпритируемом языке? Максимум эти имена будут приведены к виду v1,v2. Гугл определённого ответа не даёт. Не знаю, как там что обстоит, но вот в модемах false/true/nil занимают 4 байта. Мне для этого и нужно было, правда, вы опоздали немного сответом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Ktlo 789 Опубликовано: 8 февраля, 2016 Как такое может быть в интерпритируемом языке? Максимум эти имена будут приведены к виду v1,v2. Вы не веруете в Lua байт код? На сомом деле Lua - компилируемый язык, который компилируется каждый раз перед исполнением программы, далее Lua интерпретирует его. Также он может запускать уже готовый байт код (но в OC это надо включить в конфигах). Это всё избавляет от необходимости использовать имена переменных для исполнения самого кода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Seryoga 184 Опубликовано: 8 февраля, 2016 Если бы lua компилировался, то он бы замечал ошибки типа: print(unresolvedReference.field), во время компиляции, а не во время исполнения. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Ktlo 789 Опубликовано: 8 февраля, 2016 Если бы lua компилировался, то он бы замечал ошибки типа: print(unresolvedReference.field), во время компиляции, а не во время исполнения. А где здесь ошибка? Компилируется язык не до машинного кода (с Lua такое не возможно), а до байт кода. Называется это JIT-компиляция. Да что я тут распинаюсь, даже на Википедии об этом сказано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Hello Автор вопроса 125 Опубликовано: 9 февраля, 2016 Ну так байт-код то интерпритируется... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Ktlo 789 Опубликовано: 9 февраля, 2016 Ну так байт-код то интерпритируется... А я говорил что-то против? Я просто имел в виду, что Lua не использует названия локальных переменных для доступа к их значениям. Следовательно даже никакого v1 и v2 там нет. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Hello Автор вопроса 125 Опубликовано: 10 февраля, 2016 Вы меня убедили, локальные переменные види лишь изнутри функции, значит, там достаточно указателей в реализации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
А как определить, сколько занимает места в памяти перменная?
Со строкам уже разобрался: #string*<объем одного символа, если не ASII> --Спасибо, NEO
Со строкам тоже уже разобрался: 4 байта --Спасибо, Fingercomp
Изменено пользователем HelloПоделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах