![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
string freemem [D7, XP]
QAZ © (2010-02-17 17:43:00)как принудительно удалить строку из памяти в обход "внутренних механизмов" дельфи
QAZ (2010-02-18 19:55:00) [1]Finalize
jack128_ (2010-02-17 22:32:00) [2]
> Для констатных строк это не сработает, и будет ошибкой.
> Да, да, а кто счетчик проверять будет? :)
ну я ж сказал, вероятность AV есть. а если нужно проверять счетчик и чекать константы, то думаю подойдет такой код:
S := '';
;-)
oxffff (2010-02-17 22:04:00) [3]
> jack128_ (17.02.10 17:50) [1]
> Мазахист??? Бывает.
>
> var
> S: string;
> P: Pointer;
> begin
> SetLength(S, 100);
> P := Pointer(Integer(Pointer(S)) - 8);
> FreeMem(P);
> Pointer(S) := nil; // отключаем стандартный механизм.
> end;
>
> ЗЫ А зачем нужны такие извращения??
Для констатных строк это не сработает, и будет ошибкой.
Да, да, а кто счетчик проверять будет? :)
jack128_ (2010-02-17 21:48:00) [4]
> а если менеджер памяти не делфийский?
GetMem/FreeMem выделяет память текущим манагером памяти. Под манагером памяти я имею в виду соответствующий рекорд в модуле System. так что без разницы используешь ты стандартный манагер или же сторонний.
Но вообще мой подход - это жесткий и ненужный хак. ну и конечно он не гарантирует от AV, потому что на освобожденную память могут ссылаться сколько угодно строк..
Игорь Шевченко (2010-02-17 20:12:00) [5]http://ln.com.ua/~openxs/articles/smart-questions-ru.html
QAZ (2010-02-17 19:43:00) [6]
> тогда и самой string не будет
почемуйто ? менеджеров существует много и везде работает string
> StrLCopy предварительно нацелив PChar на нужную память
ну это не интересно,надо со string
> Сейчас автор скажет еще что это надо проделать в чужом приложении.
не скажу,телепатический сеанс не удался
Германн (2010-02-17 19:26:00) [7]Сейчас автор скажет еще что это надо проделать в чужом приложении.
Медвежонок Пятачок (2010-02-17 19:16:00) [8]тока это уже не будет типом string
Медвежонок Пятачок (2010-02-17 19:15:00) [9]как поместить string по конкретному адресу в памяти зная диапазон памяти?
StrLCopy предварительно нацелив PChar на нужную память
Медвежонок Пятачок (2010-02-17 19:13:00) [10]а если менеджер памяти не делфийский?
тогда и самой string не будет
QAZ (2010-02-17 18:08:00) [11]
> а ты думаешь память под строку как то иначе выделяется??
а если менеджер памяти не делфийский?
ЗЫ до кучи
как поместить string по конкретному адресу в памяти зная диапазон памяти?
jack128_ (2010-02-17 18:02:00) [12]
> а разве эта штука коректно работает без предварительных
> ласк с GetMem ?
а ты думаешь память под строку как то иначе выделяется??
QAZ (2010-02-17 17:59:00) [13]
> ЗЫ А зачем нужны такие извращения??
штоб поработить челавеков
> FreeMem(P);
а разве эта штука коректно работает без предварительных ласк с GetMem ?
jack128_ (2010-02-17 17:50:00) [14]Мазахист??? Бывает.
var
S: string;
P: Pointer;
begin
SetLength(S, 100);
P := Pointer(Integer(Pointer(S)) - 8);
FreeMem(P);
Pointer(S) := nil; // отключаем стандартный механизм.
end;
ЗЫ А зачем нужны такие извращения??