Форум: "Прочее";
Текущий архив: 2013.08.11;
Скачать: [xml.tar.bz2];
ВнизРабота с дубликатом. Отказ от копирования. Найти похожие ветки
← →
О-Сознание (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.002 c