Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.031 c
15-1232421567
Slider007
2009-01-20 06:19
2009.03.29
С днем рождения ! 20 января 2009 вторник


11-1198047594
Бельчонок
2007-12-19 09:59
2009.03.29
DLL - поток (TKOLThread) - Форма


2-1233741002
AlexDan
2009-02-04 12:50
2009.03.29
О операторе if


15-1232283018
saNat
2009-01-18 15:50
2009.03.29
Нет доступа к сетевым папкам


2-1233477208
jonin
2009-02-01 11:33
2009.03.29
загрузка процессора