Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1363065643
Dimka Maslov
2013-03-12 09:20
2013.08.11
Кто сказал, что бумага больше не нужна?


2-1352830854
Dennis I. Komarov
2012-11-13 22:20
2013.08.11
PL/SQL - хочу странного (а может и нет)


15-1363091856
TStas
2013-03-12 16:37
2013.08.11
Не стирается папка с флешки


2-1355136572
IGray
2012-12-10 14:49
2013.08.11
Модальное окно - не всегда верхнее?


15-1363170145
O'ShinW
2013-03-13 14:22
2013.08.11
А нет ли тут бага? Закон о торговле.





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