![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
А данные в объединении с воздуха берутся? Копировать байты по-любому приходится - либо циклом, как предложено выше, либо тем же memcpy, либо ещё чем-то аналогичным. Так зачем копировать данные в какое-то там объединение, если можно скопировать их сразу в переменную типа float? Это сообщение отредактировал(а) UnrealMan - 20.4.2009, 14:12 |
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
||||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
инструкцией mov в 32 разрядных системах 4байтовые переменные должны копироваться 1 инструкцией mov (или m2m) использование циклов, функций библиотек языка или апи для копирования 4 байт это бред %) |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
GoldFinch, в С\С++ нет инструкции mov, там вообще нет никаких инструкций
|
|||
|
||||
| Irdis |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 21.5.2008 Репутация: нет Всего: 1 |
я тоже умею
Это сообщение отредактировал(а) Irdis - 20.4.2009, 18:24 |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
тогда уж так. хотя как уже выяснилось в этой теме - вариант с memcpy - оптимальный.
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
zim22, в каком месте он оптимальный? по скорости? по объему кода? про числу строчек исходника? да ниразу
|
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
GoldFinch, предлагайте тогда альтернативные варианты. не словом, а делом.
|
|||
|
||||
| mes |
|
||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
a он разве не предложил ? и даже обосновал, почему этот вариант ему кажется самым привлекательным:
ну и не забыл охарактеризовать другие подходы :
Как видите и словом и делом |
||||||
|
|||||||
| zim22 |
|
||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
Поставьте бряк на строке с memcpy и войдите внуть функции. Вас перекинет в файл memcpy.asm. Это же ваш любимый ассемблер! Ваши любимые команды! Мечты сбываются Это сообщение отредактировал(а) zim22 - 20.4.2009, 20:13 |
||||
|
|||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
||||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Это не самый лучший способ увидеть результат оптимизации компилятора
Так что товарищи рукоблуды, занимающиеся оптимизацией посредством ассемблерных вставок, могут идти в баню. |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
для этого используют push\pop, твой оптимизатор гуан* Добавлено через 6 минут и 13 секунд алсо такой код должен инлайниться, а идея использования отдельный функции для копирования 4 байт в 4 байта ничем не лучше чем если бы memcpy была отдельной функцией |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
сорри, но не уловил смысла, нельзя ли иначе (попроще) изъясниться ? |
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Смысл примерно следующий: операции со стеком push и pop выполняются типа быстрее, чем простые mov с дополнительным регистром, только вот тупые разработчики компиляторов в Intel и Microsoft об этом не знают. А ещё mov (в отличие от push и pop) занимает страшно много места (вынуждая несчастных пользователей покупать терабайтные винчестеры для хранения полученных таким варварским способом исполнительных файлов). Короче, продемонстрированная оптимизация - полный песец, и, поэтому, ясень пень, тут нужно скорей хвататься за ассемблер, чтобы на нём родить самый оптимальный по своему количеству, скорости и переносимости исходный код. Добавлено @ 01:45 Что касается приведённого мной кода, то он специально подобран так, чтобы всем сразу было видно, во что компилятор может превратить memcpy. Это не было предложением использовать на практике именно такой код. Это сообщение отредактировал(а) UnrealMan - 21.4.2009, 11:26 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |