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

Вниз

Работа с дубликатом. Отказ от копирования.   Найти похожие ветки 

 
О-Сознание   (2013-03-12 06:49) [0]

Имеется некий набор данных, которые нужно скопировать и работать уже с дубликатом.
Копирование затратно, т.к. эту операцию нужно проводить часто и размер данных слишком большой. (Func_1)

Но ведь можно ничего никуда не копировать, а просто передать
данные в функцию без const.

На сколько это будет быстро или оправдано?


type
 TLargeData = array [0..999999] of LongWord;

procedure Func_1(const Data: TLargeData);
var
 DublicateData: TLargeData;
begin
 DublicateData:= GetDublicateData(Data); // Копируем в цикле.

 DublicateData[100]:= 1; // Что-то делаем.
end;

procedure Func_2(Data: TLargeData);
begin
 Data[100]:= 1; // Что-то делаем.
end;



 
MBo ©   (2013-03-12 07:11) [1]

>а просто передать данные в функцию без const.
И данные скопируются... Так в чём выгода?


 
DVM ©   (2013-03-12 07:13) [2]

Волшебства не бывает мы либо копируем либо нет, а чтобы скопировать такой массив цикл не нужен, а достаточно move


 
О-Сознание   (2013-03-12 07:17) [3]

>MBo ©   (12.03.13 07:11) [1]
>а просто передать данные в функцию без const.
>И данные скопируются... Так в чём выгода?

Может в том, что Delphi быстро скопирует (Низкоуровневые оптимизации), чем вручную это делать.


 
icWasya ©   (2013-03-12 09:41) [4]

А локальный параметр процедуры с ТАКИМ размером??????


 
DVM ©   (2013-03-12 10:30) [5]


> О-Сознание   (12.03.13 07:17) [3]


> Может в том, что Delphi быстро скопирует

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


 
О-Сознание   (2013-03-12 17:13) [6]

> DVM ©   (12.03.13 10:30) [5]
> О-Сознание   (12.03.13 07:17) [3]
> Может в том, что Delphi быстро скопирует
> Лучше вообще не копировать, а подумать над алгоритмом, может другой > вариант есть. Это конечно если действительно быстро надо.

Это нужно для поиска пути.
Передаётся 2-х мерный массив в виде карты. (Довольно большой)
Потом нужно сделать её дубликат и с ним работать.

Что посоветуете?


 
DVM ©   (2013-03-12 17:17) [7]


> О-Сознание   (12.03.13 17:13) [6]

Сделать массив не из LongWord а из двух LongWord или Int64 и передавать это по ссылке? Все равно же пробегаться по всем элементам, там и скопируете.


 
О-Сознание   (2013-03-12 17:23) [8]


>  icWasya ©   (12.03.13 09:41) [4]
>
> А локальный параметр процедуры с ТАКИМ размером??????


А как узнать размер, как её там, кучи или стека?


> DVM ©   (12.03.13 17:17) [7]
>
>
> > О-Сознание   (12.03.13 17:13) [6]
>
> Сделать массив не из LongWord а из двух LongWord или Int64
> и передавать это по ссылке? Все равно же пробегаться по
> всем элементам, там и скопируете.


Нет.
Сначала нужно скопировать, а потом работать с массивом. (Картой)
Я не понял, зачем 2 LongWord?

Сейчас сделано как Func_1(), т.е. копирование.


 
KSergey ©   (2013-03-12 17:27) [9]

Как устроена GetDublicateData?
Ну и про копирование памяти уже писали ведь.


 
О-Сознание   (2013-03-12 17:41) [10]


> KSergey ©   (12.03.13 17:27) [9]
>
> Как устроена GetDublicateData?
> Ну и про копирование памяти уже писали ведь.


Цикл.
Да, поменяю на копирование памяти.
Побыстрее будет.



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

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

Наверх




Память: 0.49 MB
Время: 0.005 c
15-1357748694
ТимоховД
2013-01-09 20:24
2013.08.11
Delphi XE3


15-1361520029
azlk52
2013-02-22 12:00
2013.08.11
максимальное количество подключений ХР


15-1363206603
Юрий
2013-03-14 00:30
2013.08.11
С днем рождения ! 14 марта 2013 четверг


15-1363065643
Dimka Maslov
2013-03-12 09:20
2013.08.11
Кто сказал, что бумага больше не нужна?


15-1362949660
Германн
2013-03-11 01:07
2013.08.11
Опять что-ли куки заглючили?