![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Последовательный доступ к памяти
Riply © (2006-10-26 18:29:00)Добрый вечер !
Скажите пожалуйста, могу ли я быть уверена, что в процедуре:
procedure MyProc(var pData: Pointer);
var
i: integer;
Ptr: Pointer;
begin
ReallocMem(pData, 1024 * SizeOf(Integer));
Ptr:= pData;
for i:= 0 to 1023 do
begin
CopyMemory(Ptr, @i, SizeOf(Integer));
Ptr:= Pointer(Integer(Ptr) + SizeOf(Integer));
end;
end;
я пишу именно в pData ?
Т. е. Не может ли быть такого, что pData "разбита на кусочки" ?
Ketmar (2006-10-26 19:13:00) [1]>[4] Riply(c) 26-Oct-2006, 19:05
>И вовсе не "хихик"
>Я вот не сумела найти где это написано
у меня в [1]. %-)
голова -- она не только для еды. как ты думаешь, если бы эти операции возвращали фрагментированую память, были бы в Delphi специальные конструкции для работы с указателями и фрагментированой памятью? ага. а их -- нет.
а ещё есть чудесная вещь такая -- исходники memory manager. %-)
зыж моё "хихик" обозначает вовсе не издёвку. издеваюсь я по-другому. %-)
Riply (2006-10-26 19:05:00) [2]>Ketmar © (26.10.06 18:49)
И вовсе не "хихик"
Я вот не сумела найти где это написано: "любая операция выделения памяти или
выделяет последовательный кусок или падает."
Leonid Troyanovsky (2006-10-26 19:05:00) [3]
> Riply © (26.10.06 18:29)
> Ptr:= Pointer(Integer(Ptr) + SizeOf(Integer));
Обычно поступают так:
объявляют тип массив некоторой (большой) размерности,
и используют PMyArray = ^TMyArray для доступа к
его элементам, т.е. PMyArray(Ptr)[i] := ..
На худой конец: inc, dec знают арифметику типизированных указателей.
--
Regards, LVT.
Riply (2006-10-26 19:01:00) [4]Спасибо
Leonid Troyanovsky (2006-10-26 18:53:00) [5]
> Riply © (26.10.06 18:29)
> CopyMemory(Ptr, @i, SizeOf(Integer));
Не надо CopyMemory.
Во-первых, есть Move.
Во-вторых первое лишь вызывает второе.
--
Regards, LVT.
Ketmar (2006-10-26 18:49:00) [6]хихик. а как ты себе это представляешь? и зачем? нет, не может. любая операция выделения памяти или выделяет последовательный кусок или падает.