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