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

Вниз

PChar   Найти похожие ветки 

 
dima   (2005-01-27 09:42) [0]

Добрый день....
Что то я не понимаю....
Вот реализая StrAlloc
function StrAlloc(Size: Cardinal): PChar;
begin
 Inc(Size, SizeOf(Cardinal));
 GetMem(Result, Size);
 Cardinal(Pointer(Result)^) := Size;
 Inc(Result, SizeOf(Cardinal));
end;
Т.е. выделеляется памяти на 4 байта больше, куда пишется размер блока. Потом эта величина используется при освобождении памяти StrDispose. А зачем все это? Ведь и так при резервировании блока(GetMem), менеджер памяти также добавляет свой "кусок" с размером выделяемого блока. И правомерно тогда использовать для выделения памяти под PChar GetMem, ReallocMem, FreeMem...Может для Delphi критичны эти 4 байта?


 
Kerk ©   (2005-01-27 10:04) [1]

В случае с GetMem, ReallocMem, FreeMem ты сам следишь за размером выделяемой памяти.. в StrAlloc это делает делфи.. вот и вся разница


 
dima   (2005-01-27 10:11) [2]

Что значит слежу сам?
P: Pointer;
GetMem(P, 1024);
FreeMem(P); // 1024 указывать не надо, т.к. этот размер
           // по такому же приницу хранится "перед указателем"


 
REA   (2005-01-27 10:14) [3]

Там еще есть видимо ReferenceCount на строку, где указывается число ссылок на нее.


 
Kerk ©   (2005-01-27 10:15) [4]

dima   (27.01.05 10:11) [2]
// 1024 указывать не надо, т.к. этот размер


в старом добром паскале надо. :)
видимо для совместимости такая ситуация.

а PChar можно использовать в любом блоке памяти, не важно чем выделенной.


 
Poirot ©   (2005-01-27 10:30) [5]

Дружно смотрим структуру Манеджера Памяти Делфи. Очень много интересного найдёте:)
И ваш вопрос про то, что вы не указываете размер при FreeMem Тоже. Ибо его и не надо знать - он хранится в описателе выделенного блока памяти!


 
KSergey ©   (2005-01-27 10:37) [6]

Объяснение простое - см. наличие ф-ции StrBufSize



Страницы: 1 вся ветка

Текущий архив: 2005.02.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.026 c
1-1107013494
rolex
2005-01-29 18:44
2005.02.13
А где находится диалог выбора папки?


14-1106387500
DSKalugin
2005-01-22 12:51
2005.02.13
восстановление информации на CD-R?


9-1099849062
MsShtaer
2004-11-07 20:37
2005.02.13
Тени в DirectX


1-1106842407
Knoxville
2005-01-27 19:13
2005.02.13
Загрузка из ресурсов


9-1100257007
Wish
2004-11-12 13:56
2005.02.13
Можно ли рисовать красиво?