![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
![]()
Известно, что со смещением -4 от указателя на динамические данные хранится их размер. Пишу:
Код:
4 байта ушли на указатель на класс. Ни как не могу понять, откуда еще 2 байта? Добавленно -------------------------------------------------------------- Или так: Код:
o.ClassType.InstanceSize = 8 (это понятно, выделяется порциями) Опять 14 - 8 = 6 Но если Код:
o.ClassType.InstanceSize = 4 Последний раз редактировалось Sibedir; 21.12.2010 в 05:23. |
![]() |
![]() |
![]() |
#2 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
![]()
Вопрос еще актуален:
Почему GetMem(s) выделяет минимум 14 байт (не кратно 4), а при увеличении s добавляет порции по 4Б? При этом разница между реально выделенной памятью и s всегда => 6. На что резервируются эти 6 байт. На сколько я понял, в конце выделенного участка есть ссылка на следующий выделенный участок (как в динамическом списке). Но это 4 байта а не 6. |
![]() |
![]() |
![]() |
#3 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
скорее всего до 14-ти еще два байта на чтото заняты, вообще посмотрите адреса, может 14 и идет до выравнивания на 4.
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Фрагментация. Если хранить данные с точностью до байта, то накладные расходы на управляющую информацию могут перевесить реальные данные.
Иными словами, это делается по той же причине, почему файловая система хранит файлы кластерами. На прикладном уровне в управлении памятью считается нормальным не более чем двукратное превышение выделенной памяти над запрошенной. (прежде чем начать возмущаться по поводу "ай как много памяти пропадает", вспомните правило trade size for speed и рассмотрите любой сценарий с SetLength). P.S. Понятно, что реальна картина выделения памяти зависит от того, какой менеджер памяти используется.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#5 | |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
![]() Цитата:
P.S.: Осторожно, тема - кондидат на холивар. Не хотелось бы. Последний раз редактировалось Sibedir; 22.12.2010 в 13:27. |
|
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
В каком смысле? Это волшебное число.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#7 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
![]()
Смешно
![]() Но не понятно ![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как определить размер скрытого объекта? | rolling | JavaScript, Ajax | 7 | 28.09.2009 19:39 |
С помощью методов и свойств объекта осуществляется управление терминалом. Имя (идентификатор) объекта | User>lia | Общие вопросы Delphi | 4 | 16.01.2009 16:37 |
Как поменять одну из текстур объекта не меняя все остальные и без повторной загрузки объекта в GLScene | DomKr@t | Мультимедиа в Delphi | 0 | 14.12.2008 01:52 |
Изменить размер объекта Comment | Васкинс | Microsoft Office Excel | 4 | 16.07.2008 14:11 |
Как найти размер объекта | Sibedir | Общие вопросы Delphi | 12 | 21.11.2007 06:17 |