![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Быстрый Swap,
main © (2008-11-15 20:02:00)Нужна максимально быстрая процедура, которая меняет местами содержимое блоков памяти. Что-то вроде:
procedure QuickSwap( Source,Dest :pointer; count :integer );
begin
???
end;
Почему такой процедуры нет среди стандартных? О_о
main (2008-11-16 04:36:00) [41]Я вот думаю, а мне это нужно - оправдываться тут.
Спасибо конечно что отвечаете, но простите, я вовсе и не просил советов, нужна мне эта функция или нет.
А просил я совет как сделать ее быстрее.
И нужна она мне вовсе не чтоб картинку переворачивать ( поясню, переворачиваю что-бы данные лежали одним блоком для передачи в память видеокарты ). Просто это был наглядный пример, который вобщем-то не критичный по времени ( но и там бы эта функция не помешала ).
Johnmen (2008-11-16 01:35:00) [42]
> main © (16.11.08 01:16) [27]
Этот пример не есть пример обмена, то бишь свопирования, памяти. Это, можно сказать, классический пример свопирования указателей...:)
Причем, я подозреваю, что белкин таки двигает области! Но на то он и белкин, чтобы вести себя разнузданно...:)
Германн (2008-11-16 01:27:00) [43]Опять партизаны, блин!
Германн (2008-11-16 01:25:00) [44]
> main © (16.11.08 01:16) [27]
>
>
> > Тогда проясни "твою конкретную задачу". Словосочетания
> типа
> > "редко но бывает что нужно" не способствуют получению
> наилучшего
> > ответа-решения.
>
>
> Ну вот допустим реальный и понятный пример, загрузил картинку
> ( 2024х2024 ), нужно ее перевернуть - верх/низ. Построчно
> меняю данные, размер строки 2024 * 4 байта, и так 1024 обмена.
>
И как это совместить с "Есть ОЧЕНЬ большой массив record'ов.
Вот нужно дапустим его определенным образом отсортировать."?
main (2008-11-16 01:16:00) [45]
> Тогда проясни "твою конкретную задачу". Словосочетания типа
> "редко но бывает что нужно" не способствуют получению наилучшего
> ответа-решения.
Ну вот допустим реальный и понятный пример, загрузил картинку ( 2024х2024 ), нужно ее перевернуть - верх/низ. Построчно меняю данные, размер строки 2024 * 4 байта, и так 1024 обмена.
Германн (2008-11-16 01:03:00) [46]
> ... но ... редко но бывает что нужно именно данные обменять
> ( ну бывает такое ).
Тогда проясни "твою конкретную задачу". Словосочетания типа "редко но бывает что нужно" не способствуют получению наилучшего ответа-решения.
main (2008-11-16 00:56:00) [47]
> Поверь старому козлу, это самообман...
Если бы не я этот топик создал, то навеное так-же бы советывал не менять данные, а менять указатели, индексы и т.д. ...
Я их и не меняю эти данные....
... но ... редко но бывает что нужно именно данные обменять ( ну бывает такое ).
:)))
Германн (2008-11-16 00:47:00) [48]
> Интересно, как это вы обменяете значения указателей если
> функция объявлена как в 0 посте.
>
А эту функцию ты сам придумал? Или взял откуда?
Johnmen (2008-11-16 00:43:00) [49]
> main © (16.11.08 00:36) [20]
> Но иногда вот требуется именно данные обменять
Поверь старому козлу, это самообман...
Германн (2008-11-16 00:42:00) [50]
> Johnmen © (16.11.08 00:22) [16]
>
>
> > Германн © (16.11.08 00:12) [14]
>
> Есть люди, которые хотят заблуждаться. И кто мешает им в
> этом - тот козел...:)
> Как мы с тобой...:)
>
Теперь мы не одиноки!
> Anatoly Podgoretsky © (16.11.08 00:35) [19]
>
> Совет от Кнута: вместо данных сортируй указатели.
>
Не завидую тому кто посмеет назвать АП козлом! :)
Кнут, конечно, сам не сможет вмешаться, но тут найдётся много тех, кто не потерпит такого!
main (2008-11-16 00:42:00) [51]
> Johnmen © (15.11.08 23:21) [9]
>
> > main © (15.11.08 20:02)
>
> Это эквивалентно поменянию значениями указателей
> :)))
> Johnmen © (16.11.08 00:22) [16]
>
> > Германн © (16.11.08 00:12) [14]
>
> Есть люди, которые хотят заблуждаться. И кто мешает им в
> этом - тот козел...:)
> Как мы с тобой...:)
Козел тут скорее всего я. :) А вот заблуждаетись скорее всего "наоборот".
Интересно, как это вы обменяете значения указателей если функция объявлена как в 0 посте.
main (2008-11-16 00:36:00) [52]
> DVM © (16.11.08 00:22) [17]
> Да, еще, не надо гонять туда-сюда сами данные, чтобы их
> отсортировать, гоняйте индексы.
Я уж написал, что где можно тусую только указатели.
И да, где можно, тусую индексы.
Но иногда вот требуется именно данные обменять ( очень много и разных данных ). Функция должна быть максимум критична ко времени.
Anatoly Podgoretsky (2008-11-16 00:35:00) [53]Совет от Кнута: вместо данных сортируй указатели.
main (2008-11-16 00:30:00) [54]
> Johnmen © (15.11.08 23:21) [9]
>
> > main © (15.11.08 20:02)
>
> Это эквивалентно поменянию значениями указателей
> :)))
Если бы там было было ( varPData1,PData2 :pointer; count :integer ),
то еще можно было бы подумать что "эквивалентно поменянию значениями указателей" ...
Нет менять местами требуется не значения указателей, а данные на которые они указывают.
DVM (2008-11-16 00:22:00) [55]Да, еще, не надо гонять туда-сюда сами данные, чтобы их отсортировать, гоняйте индексы.
Johnmen (2008-11-16 00:22:00) [56]
> Германн © (16.11.08 00:12) [14]
Есть люди, которые хотят заблуждаться. И кто мешает им в этом - тот козел...:)
Как мы с тобой...:)
DVM (2008-11-16 00:17:00) [57]
> И все это в динамической игре и в реальном времени, да чтоб
> не тормозило и было как минимум 30 кадров в секунду, и это
> только малая часть всех расчетов ...
>
> И вобщем-то 3 вызова move не желательно, т.е. надо бы без
> move.
>
многие люди недооценивают производительность современных компьютеров и скорость работы MOVE.
Германн (2008-11-16 00:12:00) [58]
> Есть ОЧЕНЬ большой массив record'ов.
> Вот нужно дапустим его определенным образом отсортировать.
>
> И размер одного record"а допустим НЕ маленький.
Вот и мы с Johnmen © о том же.
main (2008-11-16 00:10:00) [59]
> palva © (15.11.08 23:28) [10]
Я уже пробывал такой вариант,
и пробывал вариант с регистрами сопроцессора ( по 8 байт ).
Разницы вроде нет.
А с move вроде даже чуть быстрее ( но тест был так - приблизительный ).
Германн (2008-11-16 00:03:00) [60]
> Johnmen © (15.11.08 23:21) [9]
>
>
Опередил :)