1

Тема: VBS/JS: Можно ли определить размер переменной в VBScript

Собственно, вопрос в названии темы. Как определить, сколько байт в памяти занимает переменная в языке VBScript, JScript. Встроенных функции я не нашел, может средствами Windows Script Host можно решить данную задачу?

2

Re: VBS/JS: Можно ли определить размер переменной в VBScript

Ну, это уже внутренности скриптового движка, как он хранит переменные. А зачем это нужно знать?

3 (изменено: fomenos, 2013-05-14 20:55:17)

Re: VBS/JS: Можно ли определить размер переменной в VBScript

Просто разбирал типы данных VBScript, так, переменная типа Integer(Int) в языке Паскаль занимает 4 байта, в С++ - тоже 4 байта (хотя как пишет документация все зависит от процессора). Вот написал такой пример:


dim list(3000000)
dim var_i
var_i=100
'переменная var_i типа Integer - 4 байта (как правило)
' 3 000 000 * 4 = 12 000 000 байт - это около 11 мегабайт
' Но при запуске сценария, он съедает почти 50 Мегабайт
for i=0 to 3000000
list(i)=var_i

next
WScript.Echo ("OK")

Сам сервер Windows Script Host съедает 5 мегабайт, а после запуска сценария, процесс wscript.exe забрал около 50 мегабайт. Просто хотелось определить, сколько же Windows Script Host под переменную памяти выделяет.

4 (изменено: fomenos, 2013-05-14 21:20:44)

Re: VBS/JS: Можно ли определить размер переменной в VBScript

Оба сценария занимают один и тот же объем оперативной памяти:


'Сценарий занимает около 50 мегабайт

dim list(3000000)
dim var_i

var_i=100
var_a=CLng(var_i)

for i=0 to 3000000
    list(i)=var_a
next
WScript.Echo (VarType(var_a))

'Сценарий занимает около 50 мегабайт

dim list(3000000)
dim var_i

var_i=100
var_a=CByte(var_i)

for i=0 to 3000000
    list(i)=var_a
next
WScript.Echo (VarType(var_a))

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

5 (изменено: Rumata, 2013-05-14 21:57:07)

Re: VBS/JS: Можно ли определить размер переменной в VBScript

JS/VBS - языки с динамической типизацией. Это значит, что среде исполнения не известен заранее тип данных и не знает сколько переменных будет создано в ходе выполнения программы. Следовательно, среда исполнения не может знать сколько памяти отводить под все возможные переменные и скорее всего выделяет какой-то определенный пул памяти заданного размера. Возможно, что в какой-то момент этот пул может быть расширен, например, при достижении предела.

INT (к примеру) в языках с динамической типизацией это совсем не те же самые 4 байта в языках со статической типизацией (Pascal, C, C++), потому что переменная хранит сами данные и информацию о типе и размере данных.

И в завершении, ответ на вопрос

Как определить, сколько байт в памяти занимает переменная в языке VBScript, JScript.

скорее всего будет звучать:

Никак.

( 2 * b ) || ! ( 2 * b )

6 (изменено: YMP, 2013-05-14 22:04:48)

Re: VBS/JS: Можно ли определить размер переменной в VBScript

Помнится, в справке по VBS сказано, что там все переменные имеют тип VARIANT, т.е. это структура величиной 16 байт (x86) или 24 байта (x64). Так что всё правильно, массив должен занять 48 МБ, если движок 32-битный используется. Само число занимает только часть этой структуры, поэтому от его длины ничего и не меняется.

Хотя в VBS вроде есть ещё байтовый массив, там каждый элемент должен 1 байт занимать.