Массив Variant

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
mikhail_g
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 30.09.2011 (Пт) 8:39

Массив Variant

Сообщение mikhail_g » 10.11.2011 (Чт) 14:36

Добрый день!
Я создал массив вариантов. Будет ли происходить неявное приведение типа при присвоении элементам массива значений переменных различных типов?
Спрашиваю потому, что мне необходимо знать, будет ли размер памяти, выделенный под массив, уменьшен до величины равной сумме размеров записанных переменных. Т.е. будет ли он работать как стэк? Variant переменная занимает 16 байт, если ей присвоить integer, будет ли размер уменьшен до 2?
Например:
Код: Выделить всё
Dim Arr(5) as Variant

Arr(1)="Hello"
Arr(2)=","
Arr(3)=100
Arr(4)="World!"
Arr(5)=-5


Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Массив Variant

Сообщение Хакер » 10.11.2011 (Чт) 15:52

mikhail_g писал(а):Спрашиваю потому, что мне необходимо знать, будет ли размер памяти, выделенный под массив, уменьшен до величины равной сумме размеров записанных переменных.

Нет. X байт на SAFEARRAY и по 16 байтов на каждый Variant-ный элемент массива. Плюс дальнейшие накладные расходы, если элементом массива является строка, другой массив или UDT.

Если бы массив Variant-ов гипотетический умел ужиматься до размеров своих элементов, было бы адской задачей вычислить адрес N-ного элемента.

mikhail_g писал(а):Т.е. будет ли он работать как стэк?

Стек это нечто, что допускает по отношению к себе операции push и pop, работающие по принципу LIFO. В этом плане массив может работать как стек. В каком-то другом плане, который наверняка подразумевался — вряд ли.

mikhail_g писал(а):Variant переменная занимает 16 байт, если ей присвоить integer, будет ли размер уменьшен до 2?

Если подумать головой, то окажется, что это в принципе невозможно, потому что если кроме двух байтов, хранящих значение Integer, ничего больше нет, то непонятно, как информация о том, что это вообще Integer, а не что-нибудь другое, может занимать оставшиеся 0 битов.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

mikhail_g
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 30.09.2011 (Пт) 8:39

Re: Массив Variant

Сообщение mikhail_g » 10.11.2011 (Чт) 16:05

Спасибо за ответ!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Mail.ru [бот] и гости: 54

    TopList