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

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

Динамический массив


Tonich ©   (2006-01-14 22:28:00) 

Вопрос в следующем ))
необходимо создать двумерную матрица NxN хде N>4000
так вот Setlenght() конечно создает потобную веСЧ но очень уж долго, как это сделать быстрее а?


Loginov Dmitry   (2006-01-15 19:14:00) [1]

Но я же со смайликом :)


VirEx   (2006-01-15 18:23:00) [2]


>  [9] Loginov Dmitry ©   (15.01.06 18:02)

сам ты лол


Loginov Dmitry   (2006-01-15 18:02:00) [3]


> VirEx ©   (14.01.06 22:32) [1]
>
> http://matrix.kladovka.net.ru/Система матричных вычислений
> MatriX


LOL :))


Tonich   (2006-01-15 00:49:00) [4]


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

ну это понятно

а вот за это пасибо
> но обычно у людей элемент [1, 1] находится по адресу Pointer(Dword(@начало)
> + (1*w + 1)*SizeOf(тип_элемента)), где w - "ширина" твово
> массива..


з. танька   (2006-01-15 00:28:00) [5]

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

но обычно у людей элемент [1, 1] находится по адресу Pointer(Dword(@начало) + (1*w + 1)*SizeOf(тип_элемента)), где w - "ширина" твово массива..


Tonich   (2006-01-14 23:49:00) [6]

да проблем нет с одномерным массивом.
а овт двумерных, это ж по сути в памяти он одномерный так?
тоесть если я хочу получить элемент a[1][1] то это в массиве созданным с помошью getmem(p,...) это будит p^[2]?  я прально понимаю?


з. танька   (2006-01-14 23:38:00) [7]


> Tonich ©   (14.01.06 23:16) [4]

ну GetMem делай, в чем проблема..


Tonich   (2006-01-14 23:16:00) [8]


> PAVIA ©   (14.01.06 23:07) [2]

нее byte у меня тоже шустро, я забыл уточнить тип массива extended

вот он долго


Tonich   (2006-01-14 23:12:00) [9]

ну вообщето меня не интересует матричные вычисления, меня интересует выделение памяти...


PAVIA   (2006-01-14 23:07:00) [10]

procedure TForm1.Button1Click(Sender: TObject);
var a:array of array of byte;
t1,t2:integer;
begin
t1:=GetTickCount;
setlength(a,4000,4000);
t2:=GetTickCount;
caption:='ok '+inttostr(t2-t1);
end;
Работате быстро 32 милисекунды.
Можно через
GetMem(p,4000*4000);
Работает быстро мгновенно.
Но если делать очистку памяти
fillchar(p^,4000*4000,0);
То по скорости будет оналогично
setlength


VirEx   (2006-01-14 22:32:00) [11]

http://matrix.kladovka.net.ru/Система матричных вычислений MatriX


Наверх

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