Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать размер выделенной памяти?


dRake ©   (2005-11-29 21:06:00) 

Есть указатель, на кусок памяти, выделенной через AllocMem(),
можно ли узнать потом по этому указателю размер данный на которые он ссылается?


jack128   (2005-11-30 20:24:00) [1]

dRake ©   (30.11.05 16:12) [11]
Просто на первый взгяд - не самое прозрачное решение этой проблемы

отнюдь, ИМХО самое очевидное решение. Таже техника используется и с строках и в дин массивах..


AlexWlad   (2005-11-30 20:12:00) [2]

Почитай здесь, полезно. http://www.rsdn.ru/article/Delphi/memmanager.xml


dRake   (2005-11-30 16:12:00) [3]

2 Digitman

>можно "затереть" то что находится по смещению.

Ясное дело :) Подумаешь - опечатался :)

>и если ты умудрился (осознанно или неосознанно) нагадить там, то это >целиком и полностью лежит на твоей программистской совести)

Ну осознанно гадить я не собираюсь - если разрабы BMM это учли то все ок : ) Просто на первый взгяд - не самое прозрачное решение этой проблемы


Digitman   (2005-11-30 12:42:00) [4]


> а если это смещение кто нибудь затрет?


смещение "затереть" нельзя по определению.

можно "затереть" то что находится по смещению.

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


Плохиш   (2005-11-30 12:30:00) [5]


> Гм.. а если это смещение кто нибудь затрет?

Тогда виноват как всегда будет Билл Гейтс и его "кривая винда", которая всегда падает, потому что программист затёрший память программирует только идеальные безглючные программы, а винда ... ну ... криваяяяяя....


dRake   (2005-11-30 12:22:00) [6]

2 Palladin

>то что еще за кривотень, и для чего в ней необходимо такое столь >спецефичское знание?

Военная тайна :)

jack128

>Сейчас дельфи под рукой нету, но вроде по отрицательному смещению >размер блока храниться.. Хотя действительно непонятно,

Гм.. а если это смещение кто нибудь затрет?


jack128   (2005-11-29 22:34:00) [7]

dRake ©   (29.11.05 22:11) [5]
но предполагаю что там есть что-то типа пула указателей через который можно узнать сколько на каждый выделенно памяти :)

Сейчас дельфи под рукой нету, но вроде по отрицательному смещению размер блока храниться.. Хотя действительно непонятно,
> что еще за кривотень ;)


Palladin   (2005-11-29 22:16:00) [8]

это что еще за кривотень, и для чего в ней необходимо такое столь спецефичское знание?


dRake   (2005-11-29 22:11:00) [9]

jack128 ©

>теоретически можно, но это не документировано, поэтому не стоит так >делать..

Ну я потому и спросил - ведь прочищая память через FreeMomory() менеджер должен же знать сколько ее выло выделенно, я не лазил в кишки менеджера, но предполагаю что там есть что-то типа пула указателей через который можно узнать сколько на каждый выделенно памяти :) Поиск по хелпу ничего не дал, но всетаки хотелось бы напрячь именно его. Хаками делать не хочу, ведь реализация менеджера может и поменяться в будущем.. :)

>Palladin ©  

>:) ну вообщето автор программы должен знать сколько он выделил памяти... >правда в современной редакции Delphi это совсем не обязательно... разве >что для развлекухи...

Автор то знает, вот сохранить _красиво_ это знание не позволяет архитектура некоторой кривотени под которую автор пишет :)
Короче пришлось всетаки заводить свой пул, жаль :)


Palladin   (2005-11-29 21:25:00) [10]

:) ну вообщето автор программы должен знать сколько он выделил памяти... правда в современной редакции Delphi это совсем не обязательно... разве что для развлекухи...


Суслик   (2005-11-29 21:18:00) [11]

изучай getmem.inc и читай статью mystic'а не www.delphikingom.ru

но я согласен с [2]


jack128   (2005-11-29 21:16:00) [12]

теоретически можно, но это не документировано, поэтому не стоит так делать..


dRake   (2005-11-29 21:08:00) [13]

На всякий случай - не "на размер данных" а на "размер куска памяти"


Наверх

Титульная страница Поиск, карта сайта Написать письмо