![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Flat Memory as Dynamic array [D5, D6, D7, WinXP]
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;
Здесь радикальная ошибка