Главная страница
    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.46 MB
Время: 0.034 c
2-1233776843
Tugodum
2009-02-04 22:47
2009.03.29
Удаление ключа реестра


15-1232830550
Unknown user
2009-01-24 23:55
2009.03.29
Delphi 2009 стоит ли переходить?


15-1232375977
SP
2009-01-19 17:39
2009.03.29
Съемный диск


2-1233495081
AlexP
2009-02-01 16:31
2009.03.29
Переключение между приложениями


1-1208421010
Petrovich
2008-04-17 12:30
2009.03.29
Показ формы из компонента





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский