Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Flat Memory as Dynamic array [D5, D6, D7, WinXP]


Страницы:   1 2

andrey44 ©   (2006-10-06 15:06:00) 

Общеизвестно, что Dynamic Array представляются в Delphi указателем на первый элемент и индексом последнего. Как можно напрямую установить эти значения? Это необходимо для того, что обращаться к участку памяти как к динамическому массиву. Пробовал следующий тривиальный код, к данным обращаться можно, но попытка вызова SetLength приводит к затиранию значений массива.
type
 TArray = array of Byte;
var
 A: TArray;
 P: pointer;
begin
 GetMem (P, 10);
 FillChar (P^, 10, 100);
 A := P;
 SetLength (A, 10);
 A[0] := 1;
 FreeMem (P);
end.


Andrey44   (2006-10-06 16:56:00) [21]

> вход именно open array и не хотелось

  Тьфу, оговорился, не open, а dynamic array.


Andrey44   (2006-10-06 16:50:00) [22]

> 2Гб разместить в ВАП ХР-процесса ты не умудришься

 Хорошо, пусть будет полтора, пусть будет даже 1, но не меньше. :)


Andrey44   (2006-10-06 16:47:00) [23]

> используй PByte или по старинке

 Спасибо за совет, это обходное решение у меня давно используется, однако у меня в проекте есть модули с унифицированными интерфейсами, методы которых принимают на вход именно open array и не хотелось бы гонять гигабайты из памяти в память только для преобразования типов. :)


Сергей М.   (2006-10-06 16:38:00) [24]


> Andrey44   (06.10.06 16:32) [6]


> двухгиговому


Хоть полны штаны наделаешь, а 2Гб разместить в ВАП ХР-процесса ты не умудришься.

Так что не надо "бабушку лохматить" (с)


Palladin   (2006-10-06 16:35:00) [25]

используй PByte или по старинке

TByteArray=Array [0..0] of Byte;
PByteArray=^TByteArray


Andrey44   (2006-10-06 16:32:00) [26]

> Цель какая?

  Цель более высокого уровня - получение быстрого произвольного доступа к двухгиговому memory-mapped файлу.


Loginov Dmitry   (2006-10-06 16:18:00) [27]

andrey44   (06.10.06 15:06)
Это необходимо для того, что обращаться к участку памяти как к динамическому массиву


А это как это?


MBo   (2006-10-06 15:32:00) [28]

Цель какая?


Palladin   (2006-10-06 15:22:00) [29]

во блин... не посмотрел и написал...


Palladin   (2006-10-06 15:20:00) [30]

a:=@p[0]


Сергей М.   (2006-10-06 15:09:00) [31]


> A := P;


Здесь радикальная ошибка


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо