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

Вниз

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

Наверх





Память: 0.47 MB
Время: 0.041 c
15-1232959391
123-ий
2009-01-26 11:43
2009.03.29
Дженерики


15-1232239056
XentaAbsenta
2009-01-18 03:37
2009.03.29
хелп! что за троян был по ссылке? я тоже попался


15-1233223249
desc
2009-01-29 13:00
2009.03.29
Как обновить набор данных ?


2-1233732829
проходил мимо решил зайти
2009-02-04 10:33
2009.03.29
Сортировка данных таблице


1-1208160423
incm
2008-04-14 12:07
2009.03.29
Как в TreeView убрать у итемсов пустое место для картинки





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