Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Быстрый Swap,


Страницы:   1 2 3 4

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]
>
>

Опередил :)


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо