![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать размер выделенной памяти?
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]На всякий случай - не "на размер данных" а на "размер куска памяти"