Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.045 c
15-1268122113
AlexDan
2010-03-09 11:08
2010.08.27
Условие для radio /php/..


15-1265559467
Riply
2010-02-07 19:17
2010.08.27
Как расщепляют мгновение


15-1271414136
ocean
2010-04-16 14:35
2010.08.27
Блокировать сайты в ISA


2-1272659220
Grigoriy
2010-05-01 00:27
2010.08.27
Локализация средствами интерфейса Делфи


3-1241758934
mefodiy
2009-05-08 09:02
2010.08.27
ADO-запрос в Native БД Navision 3.7