![]() |
|
Модераторы: bsa Страницы: (11) Все « Первая ... 2 3 [4] 5 6 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
![]()
|
|
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
забываете о прокси-классах типа умного указателя.
под одну платформу, определенный тип компилятора и небольшой плясочки, чтоб привести целевой бинарник к удобному виду. ) |
||||
|
|||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
кроссплатформенность С++ зачастую приводит к очень плохой кодогенерации. лучше уж генерить хороший код под одну платформу чем *плохой* но чтоб можно было под любую. когда я пишу код который будет работать внутри готового win32 приложения, мне эта кроссплатформенность *не нужна* |
|||
|
||||
| Kallikanzarid |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 240 Регистрация: 9.11.2008 Репутация: 2 Всего: 3 |
GoldFinch, [citation needed]
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
||||
|
||||
| Kallikanzarid |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 240 Регистрация: 9.11.2008 Репутация: 2 Всего: 3 |
Мне не кажется очевидным, что кроссплатформенный исходный код приводит к генерации "плохого" бинарного кода.
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
Kallikanzarid, из-за "кроссплатформенности", в С(++) нет способа средствами языка сгенерить некоторые x86-87 команды, например загрузку констант в FPU.
Т.е. в некроссплатформенном паскале есть оператор(функция) Pi который генерит fldpi, а в кроссплатформенном С(++) оператора Pi() нет, и способа сгенерить fldpi (и другие константы) тоже нет. Впрочем код C++ для FPU местами ужасен %) Ни один нормальный программист такого бы не писал. |
|||
|
||||
| Kallikanzarid |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 240 Регистрация: 9.11.2008 Репутация: 2 Всего: 3 |
Троллинг перерастает в холивар...
1) Чем плохи заранее обсчитанные константы? 2) Паскаль - не кроссплатформенный? 3) Меня ты продавишь только цифрами, так как плевать я хотел на красоту бинарного кода 4) А ты можешь вручную оптимизировать расположение инструкций, чтобы минимизировать простой конвеера? |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
бред никакой связи тут нет вопрос лишь в поддержке компилятора не существует "кода C++ для FPU" качество кода, сгенерированного компилятором зависит от качества компилятора оценка качества оптимизированного кода неподготовленными субъектами обычно неадекватна, т.к. понять что оптимально а что нет на уже 2-х процессорных платформах способен только специалист и вообще на 2-х последних страницах столько бреда, что ужасть |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
Kallikanzarid,
1) тем что аппаратные константы много лучше программных 2) паскаль - я имел ввиду турбопаскаль, дельфи 3) цифры: fldpi - 2байта pi dt 3.14.... / fld [pi] - 10+6 байт 4) если бы ты видел код который те генерит твой компилятор, ты бы не говорил о "минимизации простоя конвеера" какбэ вот такой код при конфигурации "релиз" - это реальность .text:1000122F mov eax, dword ptr [g_hEngine] .text:10001234 mov dword ptr [eax+56F5D8h], offset Hook_ALineagePlayerController_PlayerCalcView(AActor *,FVector *,FRotator *) .text:1000123E mov ecx, dword ptr [g_hEngine] .text:10001244 mov dword ptr [ecx+57B968h], offset loc_10001190 .text:1000124E mov edx, dword ptr [g_hEngine] J0ker, ок, будет говорить исключительно о компиляторе MSVC. так вот у него кодогенератор - гуан* насчет кода для FPU - вот так вот в MSVC передаются 32-разрядные значения float .text:10001344 fld [esp+18h+arg_4] .text:10001348 fstp [esp+18h+var_14] .text:1000134C fld dword ptr [eax+4] .text:1000134F fstp [esp+18h+var_18] .text:10001352 call FCanvasUtil::DrawLine(float,float,float,float,FColor,int) видимо те кто писали кодогенератор малость не учли, что dword'ы в стек можно запихивать командой push, а не через стек FPU %) Это сообщение отредактировал(а) GoldFinch - 8.12.2008, 20:08 |
|||
|
||||
| Kallikanzarid |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 240 Регистрация: 9.11.2008 Репутация: 2 Всего: 3 |
GoldFinch, объясняю еще раз для самых одаренных. Мне. Плевать. На. Красоту. Ассемблерного. Кода. Если бахвалишься своей труъ-ассемблерностью, подтверди свое превосходство, представив реализацию какого-нибудь численного алгоритма на С++ и на асме. И время, за которое эти реализации выполняются.
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
Kallikanzarid, вот тебе какбэ алгоритм получения 80-разрядной константы Pi, разница в размере - в 8 раз, разница в быстродействии в единицы - десятки раз, в зависимости от расположения константы в кеше или нет.
Не нравится - выбери другой алгоритм, метод, условия измерения и представь свой труъ С++ код, ато я на С++ меньше месяца пишу, могу true с false через strlen() сравнивать. |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
видимо тот, кто критикует то, что не понимает, не знает того, что преобразование типов в плавающую точку является реальной операцией, а не кастом на уровне переназвания типа Это сообщение отредактировал(а) J0ker - 8.12.2008, 20:45 |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
J0ker, и где же ты там преобразование увидел? я тольк увидел преобразование m32real->m80real->m32real. там какбэ fld а не fild
Это сообщение отредактировал(а) GoldFinch - 8.12.2008, 20:48 |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
именно в функции операнды передаются через стек, и при передаче тип должен быть проверен и если он не может быть преобразован то в точке передачи обязан быть выставлен флаг исключения если данную функцию переписать как инлайн, то все будет оптимизированно на стеке FPU других решений тут нет и быть не может |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
||||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |