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

Вниз

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

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

Наверх





Память: 0.5 MB
Время: 0.011 c
14-67561
Style
2003-04-03 12:58
2003.04.21
Творчество...


1-67311
Лана Розанова
2003-04-09 09:45
2003.04.21
Округление


7-67587
Archie
2003-02-24 09:43
2003.04.21
как достать данные о компе (проц, память etc...)


6-67429
Roman Go
2003-02-26 11:25
2003.04.21
Кто нибудь видел прогу?


7-67596
Yozch_
2003-03-04 15:43
2003.04.21
Как определить почтовый клиент по умолчанию?





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