Размер переменной

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ReMAG
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 54
Зарегистрирован: 02.10.2005 (Вс) 4:01
Откуда: Киев

Размер переменной

Сообщение ReMAG » 02.10.2005 (Вс) 16:59

Как можно определить размер объекта в байтах?
Никогда не говори "никогда"...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.10.2005 (Вс) 17:36

А зачем?
Изображение

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 02.10.2005 (Вс) 20:18

Размер объекта или переменной?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 02.10.2005 (Вс) 20:26

len(переменная)
ХЎ

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.10.2005 (Вс) 20:31

BV, d3drm - в вопросе же сказано: "размер объекта"
Изображение

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 02.10.2005 (Вс) 20:55

... а в названии темы - "размер переменной".

d3drm, не совсем точно - нужно использовать LenB(). Иначе строки... ну, вы понимаете.

ReMAG
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 54
Зарегистрирован: 02.10.2005 (Вс) 4:01
Откуда: Киев

Сообщение ReMAG » 03.10.2005 (Пн) 0:56

Ennor писал(а):... а в названии темы - "размер переменной".


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

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.10.2005 (Пн) 1:36

Переменная - это не объект. Это ссылка на объект. Она занимает всегда 4 байта. Сколько занимает сам объект - никак не узнать.

А как ты собирался, интересно, формировать байтовую последовательность из объектов? Надеюсь, не через CopyMemory? ;-)
Изображение

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 03.10.2005 (Пн) 1:59

ReMAG писал(а):имелось в виду, что переменная тоже объект, если я все правильно понимаю.

Не совсем.

Когда tyomitch задавал свой вопрос, он имел в виду примерно следующее. В Visual Basic имеются три вида переменных:
    1. Переменные встроенных типов (intrinsic). Это всем известные Long, String, Byte и т.д. Когда имеют в виду переменную подобного рода, для краткости ее называют просто "переменная".
    2. Переменные пользовательских типов (UDT - user-defined types). Это - прямой аналог структур из С/С++ и записей (records) из Паскаля. Штатной терминологии нет (т.е. она есть, но слишком неудобна в повседневном общении), поэтому лично я называю такие переменные структурами, по аналогии с Си.
    3. Переменные ссылочных типов (References). Вот тут уже интереснее. Ибо совершенно одинаковая внутри (4-байтный указатель на некую область памяти) переменная, будучи осмотренной снаружи, в состоянии явить в общем случае произвольный ActiveX COM-интерфейс, а точнее, ссылку на него. И только этот вид переменных называется обычно объектами, или объектными переменными, или как там еще у кого фантазию переклинит.

Это я все к чему: определение занимаемой памяти штатными средствами возможно только для переменных первых двух видов. И то - структура вполне в состоянии иметь внутри себя члены ссылочных типов, так что тут тоже нужна осторожность. Далее, строки переменной длины, а еще круче - массивы строк - в состоянии доставить, наверное, не меньшую головную боль в твоей задаче. А уж про то, что любой объект может внутри себя содержать произвольное количество ссылок на другие объекты не менее произвольных типов, мне даже говорить не хочется.

Ну так вот: подумай как следует, может, имеет смысл в консерватории чего подправить? В смысле, не очень удачная реализация.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 03.10.2005 (Пн) 8:56

Ennor.
UDT - не прямой аналог структур, мы уже выяснили ;)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.10.2005 (Пн) 11:44

Amed писал(а):Ennor.
UDT - не прямой аналог структур, мы уже выяснили ;)

Ага, это - кривой аналог структур ;-)
Изображение

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 03.10.2005 (Пн) 12:52

Знаю. Но это - единственный хоть какой-то аналог, а за отсутствием горничной, как известно... ;)

ReMAG
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 54
Зарегистрирован: 02.10.2005 (Вс) 4:01
Откуда: Киев

Сообщение ReMAG » 03.10.2005 (Пн) 21:42

Ennor писал(а):
ReMAG писал(а):имелось в виду, что переменная тоже объект, если я все правильно понимаю.

Не совсем.
Переменные встроенных типов (intrinsic). Это всем известные Long, String, Byte и т.д. Когда имеют в виду переменную подобного рода, для краткости ее называют просто "переменная".


Хорошо. Нужно определить размер переменной встроенного типа или intrinsic. Структуры, в конечном счете состоят из них и указателей, а указатели в этом контексте меня точно не интересуют.
Никогда не говори "никогда"...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.10.2005 (Пн) 21:47

Размер переменной встроенного типа предопределён, его не надо определять.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ReMAG
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 54
Зарегистрирован: 02.10.2005 (Вс) 4:01
Откуда: Киев

Сообщение ReMAG » 03.10.2005 (Пн) 22:37

GSerg писал(а):Размер переменной встроенного типа предопределён, его не надо определять.


Т.е. есть соответствие "тип-размер" и он будет верен в 100% случаев? Где его можно взять?
Никогда не говори "никогда"...

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 03.10.2005 (Пн) 23:16

LenB() - размер переменной в байтах. Работает как для встроенных типов, так и для структур, в последнем случае особенно полезен. Но учти, что массивы эта штука не принимает, с массивами отдельный разговор. Надеюсь, у тебя их вообще нет...

ReMAG
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 54
Зарегистрирован: 02.10.2005 (Вс) 4:01
Откуда: Киев

Сообщение ReMAG » 03.10.2005 (Пн) 23:21

Ennor писал(а):LenB() - размер переменной в байтах. Работает как для встроенных типов, так и для структур, в последнем случае особенно полезен. Но учти, что массивы эта штука не принимает, с массивами отдельный разговор. Надеюсь, у тебя их вообще нет...


Спасибо, работает. Для массивов, я так понимаю, надо умножить размер элемента на их кол-во.
Никогда не говори "никогда"...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 04.10.2005 (Вт) 9:08

ReMAG писал(а):Спасибо, работает. Для массивов, я так понимаю, надо умножить размер элемента на их кол-во.

Э... С SAFE_ARRAY не совсем так. Почитай статьи на сайте, особенно статьи GSergа.
Lasciate ogni speranza, voi ch'entrate.


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

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

Сейчас этот форум просматривают: Google-бот и гости: 34

    TopList