|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
14.11.2007, 15:19 | #1 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Как найти размер объекта
Имеется куча объектов разного типа (мои и не мои). Поля объектов имеют простые типы: integer, real, char, byte. Нужно узнать сколько памяти занимает каждый из них.
|
14.11.2007, 15:32 | #2 |
Реанимируюсь...
Участник клуба
Регистрация: 19.07.2007
Сообщений: 1,445
|
Функция SizeOf возвращает занимаемый размер (в байтах) переменной (Variable) или типа (Type).
Более подробно в справке Делфи или здесь: http://www.delphibasics.ru/SizeOf.php
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе... P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows" |
14.11.2007, 15:48 | #3 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Решил через MyObject.InstanceSize
Спасибо за ссылку: http://www.delphibasics.ru/SizeOf.php Вопрос №2: А что делать если поле типа String или Record или Array? Последний раз редактировалось Вадим Мошев; 14.11.2018 в 15:07. |
14.11.2007, 16:14 | #4 |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
size:=sizeof(x), где х - хоть строка, хоть массив, хоть запись (структура).
Примечание: *если строка задана как s:string; то размер будет всегда 4 (указатель). Если хотим узнать точнее пишем length(s) - возвращает длину строки. 1 символ = 1 байт *если задана как s:=string[N]; (0 < N < 256) то размер будет N+1 При WideString аналогично, учитываем, что 1 символ = 2 байта. Юникод всё-таки) Последний раз редактировалось zetrix; 14.11.2007 в 16:23. |
14.11.2007, 16:25 | #5 | |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Цитата:
Короче, есть некий класс: Код:
Код:
Код:
s1 = 4 s2 = 20 Ни то, ни другое не веоно Мне нужен весь объем занимаемый объектом вместе с его полями. Не буду же я все доступные объекты регестрировать и по полям их проверять. Я пока на классы, поля которых являются объектами, и не замахиваюсь. Мне бы с массивами и записями разобраться. Неужели задача неразрешима. Жаль Последний раз редактировалось Вадим Мошев; 14.11.2018 в 15:18. |
|
14.11.2007, 18:29 | #6 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
TMyClass = class
F1: Integer; F2: Real; F3: String; end; PMyClass = ^TMyClass; var MyObject: PMyClass И дальше как-то рулить с указателями?
пыщь
|
14.11.2007, 21:00 | #7 | |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
по моему размер данных класса это <объект>.InstanceSize
справка Delphi: Цитата:
Последний раз редактировалось rpy3uH; 14.11.2007 в 21:18. |
|
14.11.2007, 21:40 | #8 | |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
для rpy3uH:
см. #6 для JTG: Да не могу я через Цитата:
Постараюсь решить через Код:
Последний раз редактировалось Вадим Мошев; 14.11.2018 в 15:20. |
|
15.11.2007, 12:26 | #9 |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
Хм... а почему 20 байт не верно?) Вроде всё верно...
integer = 4 байта real = 8 байт string = 4 байта (как указатель) Итого: 4+4+8=16 байт. Ну, ещё 4 байта осталось... Моё мнение - это указатель самого обёкта. Вот в 20 и уложились |
15.11.2007, 20:17 | #10 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
так и есть - это поле Self
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Изменить размер объекта Comment | Васкинс | Microsoft Office Excel | 4 | 16.07.2008 14:11 |
Динамическое создание объекта | ANGa | Помощь студентам | 3 | 10.04.2008 18:14 |
Как найти размер папки! | vitalik007 | Общие вопросы Delphi | 6 | 02.02.2008 14:29 |
Принадлежность объекта по координатам | Angel_CJ | Помощь студентам | 9 | 12.09.2007 18:43 |
Свойства объекта | KBak | Win Api | 5 | 15.08.2007 20:21 |