Текущий архив: 2009.03.29;
Скачать: CL | DM;
Вниз
New vs GetMem Найти похожие ветки
← →
DeadMeat (2009-01-28 12:17) [0]Здравсте. Вопрос чисто теоретический. Допустим есть рекорд:
PMyRecord = ^TMyRecord;
TMyRecord = record
Data: integer;
end;
Надо выделить "под него" память. Т.е. нечто вроде:
var
bufRecord: PMyRecord;
begin
New(bufRecord);
adr := bufRecord;
end;
Но можно выделить и так:
GetMem(adr, SizeOf(TMyRecord));
Вопрос:
а в чем собсна разница? В справке сказано только про параметры. Ну в смысле что по разному передаются. Что New сам вычисляет размер, а в GetMem его надо передать.
← →
Сергей М. © (2009-01-28 12:32) [1]New/Dispose отвечает за инициализацию/финализацию данных в аллокируемых/деаллокируемых блоках , в то время как Get/FreeMem занимается только аллокацией/деаллокацией блоков.
← →
DeadMeat (2009-01-28 12:42) [2]
> Сергей М. © (28.01.09 12:32) [1]
Спасибо. А в чем заключается инициализация данных собсна? Вот, к примеру, AllocMem инициализирует нулями блок памяти. А New что в этом случае делает?
← →
Palladin © (2009-01-28 12:44) [3]
> А в чем заключается инициализация данных собсна?
в инициализации/финализации полей типа String, Array of, Variant и пр. с управляемым rtl временем жизни
← →
Sapersky (2009-01-28 14:41) [4]На данный момент вся инициализация - это заполнение полей нулями, так что практической разницы между New и AllocMem нет (разве что первая "прицельно" заполняет managed-поля, а не все подряд).
Вот между Dispose и FreeMem - есть и существенная, финализация сложнее чем просто обнуление.
← →
DeadMeat (2009-01-28 15:26) [5]Все понятно. Т.е. по сути New лучше для рекордов, а GetMem для памяти, которая используется блоком (картинку загрузить, файл и т.п.).
Всем спасибо за ответы. Тема исчерпана.
← →
Palladin © (2009-01-28 15:32) [6]А ты New к выделению памяти нерекордам и не применишь.
> по сути New лучше для рекордов
Она не лучше, она для них и предназначена.
← →
jack128_ (2009-01-28 15:40) [7]
> А ты New к выделению памяти нерекордам и не применишь.var
S: ^string;
begin
New(S);
end;
PS New/Dispose применимы к любому указателю.
← →
Palladin © (2009-01-28 15:44) [8]
> jack128_ (28.01.09 15:40) [7]
я имел ввиду к нетипизированным указателям... согласен, косяк с моей стороны...
← →
Anatoly Podgoretsky © (2009-01-28 16:07) [9]> Palladin (28.01.2009 15:44:08) [8]
В случае нетипизированного указателя непоятно сколько выделять.
← →
jack128_ (2009-01-28 16:22) [10]
>
> я имел ввиду к нетипизированным указателям...
В случае НЕтипизировнаного указателя New просто обниливает его. Хотя конечно это не очевидно..
← →
Palladin © (2009-01-28 17:10) [11]
> Anatoly Podgoretsky © (28.01.09 16:07) [9]
в том и дело
> jack128_ (28.01.09 16:22) [10]
не буквоедничай
Страницы: 1 вся ветка
Текущий архив: 2009.03.29;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.034 c