|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
||||||
Подскажите пожалуйста аналог функции RtlMoveMemory только быстрее29.03.2023, 12:32. Показов 3474. Ответов 49
Метки нет (Все метки)
Здравствуйте! Мне часто приходится копировать память, в основном это строковые данные переменной длинны.
Всем известно, что функции GeMem 1-8 работают гораздо быстрее, чем CopyMemory. Но нет такой функции для переменной длины. Вы конечно, может будете смеяться, но я при копировании небольших строк переменной длины использую даже код такой:
0
|
||||||
| 29.03.2023, 12:32 | |
|
Ответы с готовыми решениями:
49
алгоритм функции RtlMoveMemory Win32API n Подскажите аналог функции SetConsoleCursorPosition Подскажите аналог функции StrCmpICA |
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 30.03.2023, 12:04 [ТС] | |
|
0
|
|
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 30.03.2023, 12:08 [ТС] | |
|
Мои тесты:
RtlMoveMemory (Direct): 2.94 GetMem (Direct): 2.91 CopyBytes (Direct): 3.39 RtlMoveMemory (Pointer): 1.60 GetMem (Pointer): 0.97 CopyBytes (Pointer): 2.10 Итого: Функция CopyBytes, которую вы мне тут рекламировали, оказалась в два раза медленнее чем GetMem.
0
|
|
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 30.03.2023, 12:11 [ТС] | |
|
Я забыл сказать я копирую реально маленькое количество байтов от одного до десяти где-то в среднем по несколько миллионов раз. То есть ваш совет использовать CopyBytes заставил бы ещё больше тормозить мою программу поиска. Только хуже бы сделал.
0
|
|
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 30.03.2023, 12:30 [ТС] | |
|
Так же не хочется обижать уважаемого Mikle Quits но его функция ещё медленнее. При копировании 4 байт.
Мои тесты: RtlMoveMemory (Direct): 2.94 GetMem (Direct): 2.91 CopyBytes (Direct): 3.39 CopyMemorySR2D (Direct): 4.19 RtlMoveMemory (Pointer): 1.60 GetMem (Pointer): 0.97 CopyBytes (Pointer): 2.10 CopyMemorySR2D (Pointer): 2.23
0
|
|
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 30.03.2023, 12:31 [ТС] | |
|
На больших блоках может и правда результат будет другой.
А на маленьких блоках, значит лучше всего GetMem, а потом уже на втором месте идёт RtlMoveMemory. Это я ещё не тестировал memcpy настоящее.
0
|
|
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 30.03.2023, 12:52 [ТС] | |
|
Я только что проверил memcpy быстрее всего будет. Удивило, что в майкрософте написали что это "запрещённая" функция. Пхахаххаха.
Мои тесты: RtlMoveMemory (Direct): 2.94 GetMem (Direct): 2.91 CopyBytes (Direct): 3.39 CopyMemorySR2D (Direct): 4.19 memcpy (Direct): 2.48 (быстрее всего) RtlMoveMemory (Pointer): 1.60 GetMem (Pointer): 0.97 (быстрее всего) CopyBytes (Pointer): 2.10 CopyMemorySR2D (Pointer): 2.23 memcpy (Pointer): 1.25
0
|
|
|
1024 / 313 / 18
Регистрация: 21.01.2023
Сообщений: 552
|
|
| 30.03.2023, 14:08 | |
|
HackerVlad, HackerVlad, при копировании блоков фиксированного размера должны выигрывать функции, на это рассчитанные, типа PutMem4 и т. п. Но городить из них с помощью
Ifов конструкцию - это уже будет заметно медленнее, чем использование функции, заранее рассчитанной на переменный размер.The trick, что-то в твоём варианте теста GutMem и PutMem отстают в 30-100 раз. Проверяю на XP. Пока сильно не вникал.
0
|
|
|
Модератор
|
||||||
| 30.03.2023, 14:13 | ||||||
|
Вот корректный тест который показывает различие в скорости при копировании от MIN_SIZE до MAX_SIZE (от 1 до 10 байт в примере) с непоследовательным доступом:
1
|
||||||
|
Модератор
|
||
| 30.03.2023, 14:14 | ||
|
0
|
||
|
1024 / 313 / 18
Регистрация: 21.01.2023
Сообщений: 552
|
||||||
| 30.03.2023, 14:40 | ||||||
|
Добавил SR2D в последний вариант от The Trick:
memcpy не подключилась, что там нужно сделать?
1
|
||||||
|
Модератор
|
||
| 30.03.2023, 14:44 | ||
|
0
|
||
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 30.03.2023, 15:10 [ТС] | |
|
The trick, чего не пользуешься моей программой ClipboradPath специально же писал для копирования VB текстов в браузер)))))))) а то ты поторопился и кракозяблики скопировал))))))
Добавлено через 19 минут Почему же так вышло что memcpy теперь стало медленее. Не понял юмора.
0
|
|
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 30.03.2023, 15:31 [ТС] | |
|
CopyMemorySR2D в вашем примере ТОЛЬКО на 5 млск быстрее, а не значительно как вы хвастались или у меня процессор слишком мощный или я чего-то не понимаю
Добавлено через 2 минуты Я делаю для себя выводы что и RtlMoveMemory оптимальная достаточно функция. Но GetMem1-8 лучше для единоразовых маленьких кусочков.
0
|
|
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 30.03.2023, 15:35 [ТС] | |
|
Не хочу спросить наверное на слабых процессорах будет сильно отличаться скорость. Вот скомпоновал вместе с CopyMemorySR2D.
0
|
|
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 30.03.2023, 15:37 [ТС] | |
|
vbaCopyBytes по оптимальности похожа на CopyMemorySR2D только чуть-чуть медленнее. В итоге чтобы не тягать библиотеку SR2D с собой лучше использовать vbaCopyBytes там разница миллисекунд 30 всего по моим тестам
0
|
|
| 30.03.2023, 15:37 | |
|
Подскажите пожалуйста только начал изучать WinApi
Подскажите пожалуйста можна ли убрать то что в середине, оставить только контур окружности Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки.
Добавлено:
- Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|