Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.032 c
14-1106210264
Чеширский_Кот
2005-01-20 11:37
2005.02.13
Gmail.com


14-1106491743
jack128
2005-01-23 17:49
2005.02.13
Задачка про визирей


8-1098903047
Alein
2004-10-27 22:50
2005.02.13
Эффект Bevel (как в Photoshope)


14-1106225808
syte_ser78
2005-01-20 15:56
2005.02.13
gettime


1-1107155471
КаПиБаРа
2005-01-31 10:11
2005.02.13
Главная форма как в Delphi IDE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский