![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамический массив
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