Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.21;
Скачать: CL | DM;

Вниз

Выделение памяти   Найти похожие ветки 

 
Still Swamp   (2003-04-11 11:55) [0]

Как выделить память под некоторый список из Single, и как получить доступ к i-тому элементу?


 
MBo ©   (2003-04-11 11:56) [1]

динамический массив устроит?


 
Skier ©   (2003-04-11 11:56) [2]

дин. массив не устроит ?


 
Skier ©   (2003-04-11 11:57) [3]

>MBo
Однако ! :)))


 
MBo ©   (2003-04-11 11:57) [4]

;-)


 
Palladin ©   (2003-04-11 12:01) [5]

какие вы синхронные..


 
Still Swamp   (2003-04-11 12:07) [6]

а он переварит скажем десяток миллионов записей.
скорее всего нет.


 
malkolinge ©   (2003-04-11 12:09) [7]

Getmmem

Структура списка

Plist=^TListElement

TListElement=record
value:Integer
Nextvalue:Plist
end;

Всегда нужно помнить голову списка, т.е указатель на первый елемент. А далее тривиально.


 
MBo ©   (2003-04-11 12:10) [8]

даже сто миллионов переварит, если памяти и свопа хватит


 
Skier ©   (2003-04-11 12:10) [9]

>Still Swamp
Ого !
А цель всего этого какая ?


 
malkolinge ©   (2003-04-11 12:16) [10]


> а он переварит скажем десяток миллионов записей.
> скорее всего нет.

мой переварит, особенно если будешь добавлять елементы по мере надобности


 
evvcom ©   (2003-04-11 12:21) [11]

А ты посчитай 10 млн. * 4 байта = (примерно) 40 Мег.


 
Still Swamp   (2003-04-11 12:21) [12]

а еще вопрос - как располагается в памяти это изделее?

var
FBBuf: array of Single;
begin
SetLength(FBBuf, 10);

последовательно?

1 байт первого элемента
2 байт первого элемента
3 байт первого элемента
4 байт первого элемента
1 байт второго элемента
.... и тд?



 
Skier ©   (2003-04-11 12:25) [13]

SetLength(FBBuf, 10) - да
а вот SetLength(FBBuf, 10000000); - не думаю :)



 
Still Swamp   (2003-04-11 12:30) [14]

OpenGL выгружает данные для GL_FEEDBACK в буффер Single.
У меня 100000 тысяч pointov, для каждого может потребоваться 5 элементов. Вот и нужно организовать буффер. Только то и всего.

Таки вот и проблема.

А как это сделать?



 
Palladin ©   (2003-04-11 12:37) [15]


> malkolinge © (11.04.03 12:09)

ты хоть подумал насколько долго будет работать очередь с десятком миллионов записей?


 
Still Swamp   (2003-04-11 12:38) [16]

это не имеет значения.... меня интересует как организовать буффер.


 
evvcom ©   (2003-04-11 12:40) [17]

По-моему по-порядку и для 10 млн. будет. Создай, обратись к одному из последних индексов массива и посмотри дизассемблером.


 
Palladin ©   (2003-04-11 12:41) [18]


> Still Swamp (11.04.03 12:21)

да последовательно...


 
Still Swamp   (2003-04-11 12:43) [19]

да нет - в том то и дело.
он динамический массив похоже создает в области своих локальных данных.

а в нее не вмещается, компилятор похоже начинает шаманить. обратиться то он обращается, но по всей видимости блок не непрерывно располагается.

мне бы GetMem, но как потом эти значения собирать побайтно......


 
Skier ©   (2003-04-11 12:46) [20]


> мне бы GetMem, но как потом эти значения собирать побайтно......

Move(...)


 
Palladin ©   (2003-04-11 12:46) [21]

имхо
этого не может быть..

p:array of byte;

это ссылка на последовательность данных указатель один и цепочка данных одна...


 
Still Swamp   (2003-04-11 12:47) [22]

ну хорошо.
допустим ты отвел 200 значений. они расположились подряд.
а потом еще 200. ну и не факт что эти последние пристроятся в хвост к первым.


 
Still Swamp   (2003-04-11 12:51) [23]

к стати, вот что в Helpe написано. Existing characters in the string or elements in the array are preserved, but the content of newly allocated space is undefined.


 
Palladin ©   (2003-04-11 12:52) [24]

можно конечно посмотреть CPU... но лень...

я думаю что компилятор возьмет новую область памяти в 400 и туда все перенесет со старой, а старую освободит...


 
Skier ©   (2003-04-11 12:53) [25]

>Still Swamp

> не факт что эти последние пристроятся в хвост к первым.

Но менеджер памяти Delphi всё сделает за тебя...


 
Still Swamp   (2003-04-11 12:54) [26]

неа - так точно не будет. в хелпе и написано именно это.

может всетаки есть идеи кроме Move() - уж очень стремное мероприятие.


 
Still Swamp   (2003-04-11 12:56) [27]

да менеджер то сделает, я не соменваюсь.... но OpenGL то будет выгружать свои данные, с адреса @BFBUF и последовательно.... :(


 
Palladin ©   (2003-04-11 12:58) [28]

посмотри реализацию DynArraySetLength в модуле System.pas


 
Still Swamp   (2003-04-11 13:44) [29]

Для FAQ.

var
FBBuf: array of Single;
pt:pointer;
begin
GetMem(PT, DataObject.RecordList.Count*5*4);
FBBuf:=pt;


 
Palladin ©   (2003-04-11 14:02) [30]

а какой вопрос?



Страницы: 1 вся ветка

Текущий архив: 2003.04.21;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.025 c
3-67085
koks
2003-04-01 14:08
2003.04.21
CashedUpdates на результат SP


3-67118
Smashich
2003-04-02 17:04
2003.04.21
TClientDataSet


4-67612
Chlavik
2003-02-21 02:31
2003.04.21
WinApi :)


1-67331
Che
2003-04-09 12:30
2003.04.21
TMemo


3-67187
td
2003-04-03 21:20
2003.04.21
странный запрос