Сейчас на форуме: bartolomeo (+6 невидимых) |
eXeL@B —› Программирование —› Вопрос по Си программированию |
. 1 . 2 . 3 . 4 . >> |
Посл.ответ | Сообщение |
|
Создано: 28 ноября 2010 23:54 · Поправил: PE_Kill · Личное сообщение · #1 Хех мои жалкие потуги. Буду тут флудить. Пытаюсь накодить функцию. Функция на вход получает контекст и данные, после чего распихивает эти данные в контекст. Собственно цель оптимизировать весь код эту и другие функции по размеру. Компилятор в релизе вырезает нахрен функцию и втыкает ее код прямо в основной код, как будто это макрос. Собственно вопрос, как ему сказать что мне это не нравится, но при этом оставить оптимизацию по размеру? ----- Yann Tiersen best and do not fuck |
|
Создано: 29 ноября 2010 00:29 · Личное сообщение · #2 |
|
Создано: 29 ноября 2010 00:38 · Личное сообщение · #3 |
|
Создано: 29 ноября 2010 01:14 · Личное сообщение · #4 |
|
Создано: 29 ноября 2010 01:20 · Личное сообщение · #5 |
|
Создано: 29 ноября 2010 01:21 · Личное сообщение · #6 |
|
Создано: 29 ноября 2010 01:39 · Личное сообщение · #7 |
|
Создано: 29 ноября 2010 02:06 · Личное сообщение · #8 |
|
Создано: 29 ноября 2010 02:13 · Личное сообщение · #9 Sunzer пишет: Как вариант засунуть вызов функции с разных мест, которые никогда не будут вызваны, дурацкий костыль, но все же. Тогда умный компилятор просто грохает эти вызовы. Ладно вроде заработало. Теперь другой вопрос. Допустим я инициализирую некое поле структуры типа: pStruct->Value = Data; После этого мне нужно перевернуть значение в структуре. Как это сделать максимально коротко? Хотел сделать что то типа _asm bswap pStruct->Value; Но Си ругается. Как правильно? ----- Yann Tiersen best and do not fuck |
|
Создано: 29 ноября 2010 02:45 · Личное сообщение · #10 Не страдай фигней, а просто установи оптимизацию по размеру в настройках проекта, там же можно принудительно отключить все инлайны. Запретить инлайнить конкретную функцию можно указав перед ней __declspec(noinline) PE_Kill пишет: После этого мне нужно перевернуть значение в структуре. Как это сделать максимально коротко? Хотел сделать что то типа_asm bswap pStruct->Value;Но Си ругается. Как правильно? За использование _asm без крайне веской причины надо отрубить руки. Я серьезно. Используй интринсики _byteswap_ushort, _byteswap_ulong и _byteswap_uint64, для простоты и портабельности оберни их в макросы разворачивающие это в последовательность сдвигов - or'ов для компиляторов не поддерживающих интринсики. ----- PGP key |
|
Создано: 29 ноября 2010 02:49 · Личное сообщение · #11 |
|
Создано: 29 ноября 2010 02:51 · Личное сообщение · #12 PE_Kill пишет: Я так и сделал, но переворот 4 байтов Си превращает в портянку. Пытался через сдвиги сделать. Как заинлайнить bswap? Или как заставить Си повернуть байты коротко, не кучей shl и перекидыванием байтов из буфера в регистры и обратно. Я уже сказал - юзай интринсики. Не нравится их вид в исходном коде - оборачивай в макросы. ----- PGP key |
|
Создано: 29 ноября 2010 02:51 · Личное сообщение · #13 |
|
Создано: 29 ноября 2010 02:54 · Личное сообщение · #14 PE_Kill пишет: Как заюзать _byteswap_xx? Си не знает такого. Да, си не знает такого. Знают компиляторы msvc, icc и gcc, если ты юзаешь какой-то другой, то сделать можно только через сдвиги. З.Ы. обзаведись msdn и заинклудь в своих сорцах intrin.h ----- PGP key |
|
Создано: 29 ноября 2010 02:55 · Личное сообщение · #15 Не, я мсдн глянул. Заинклудил <stdlib.h> как там сказано, получилось это: Code:
----- Yann Tiersen best and do not fuck |
|
Создано: 29 ноября 2010 02:56 · Личное сообщение · #16 Интринсики в настройках проекта включены? А то у меня почему-то получается что надо. ----- PGP key |
|
Создано: 29 ноября 2010 03:06 · Личное сообщение · #17 |
|
Создано: 29 ноября 2010 03:10 · Поправил: PE_Kill · Личное сообщение · #18 ntldr пишет: Интринсики в настройках проекта включены? Это где про SIMD расширение? Включил вообще перестало свапиться, как будто нет этой строчки в исходнике. Отключаю свапится через портянку сдвигов. Обалдеть, я уже час пытаюсь 4 байта в си перевернуть. ntldr вот об это я и говорил в топе стилф дбг. ----- Yann Tiersen best and do not fuck |
|
Создано: 29 ноября 2010 03:14 · Личное сообщение · #19 Это "Enable Intrinsic Functions" на вкладке "C/C++->Optimization". ----- PGP key |
|
Создано: 29 ноября 2010 03:17 · Поправил: sniper · Личное сообщение · #20 |
|
Создано: 29 ноября 2010 03:27 · Поправил: sniper · Личное сообщение · #21 ntldr PE_Kill кодес: Code:
получаем: Code:
VS2008, оптимизация по размеру.. |
|
Создано: 29 ноября 2010 03:31 · Поправил: PE_Kill · Личное сообщение · #22 |
|
Создано: 29 ноября 2010 03:37 · Личное сообщение · #23 sniper Вообще-то все интринсики можно подключить через intrin.h, stdlib нужен если нужна сборка с отключенной поддержкой интринсиков. PE_Kill пишет: Включены подстановки, вообще нет свапа. Код в студию, ибо это или чьи-то руки, или огромный баг компилятора. ----- PGP key |
|
Создано: 29 ноября 2010 03:43 · Поправил: sniper · Личное сообщение · #24 |
|
Создано: 29 ноября 2010 10:20 · Поправил: PE_Kill · Личное сообщение · #25 ntldr пишет: ибо это или чьи-то руки, или огромный баг компилятора Ага это руки, надо было сразу бросить и поспать, пытался заюзать эту функцию как процедуру. sniper пишет: заметь как msvc оптимизировал код Ага я уже свой алгос потестил, просто писаю кипятком. Как будто протектор какой то ковыряю, такие финты... Вот например инициализация структуры: Code:
PS Запустил на другом компе, ругается Приложению не удалось запуститься, поскольку MSVCR100.dll не был найден. Повторная установка приложения может исправить эту проблему. Как бы компилить так, чтобы обычные библиотеки использовались, которые есть во всех виндах, проект то 50 строчек работы со структурами апи вообще не юзаются, нафига оно такое собирает? ----- Yann Tiersen best and do not fuck |
|
Создано: 29 ноября 2010 10:27 · Личное сообщение · #26 |
|
Создано: 29 ноября 2010 10:30 · Поправил: Av0id · Личное сообщение · #27 |
|
Создано: 29 ноября 2010 10:45 · Личное сообщение · #28 PE_Kill пишет: Как бы компилить так, чтобы обычные библиотеки использовались Линковать с msvcrt.lib из аттача, отключить "Buffer Security Check" и отключить генерацию манифеста. И сразу забыть про использование MFC и других приплюснутых библиотек. Либо просто-напросто включить статический CRT, получить большой екзешник но без проблем. З.Ы. не рекомендую так делать без нужды, ибо функциональность новой CRT лучше, и может сэкономить кучу времени и нервов. 7704_28.11.2010_CRACKLAB.rU.tgz - msvcrt.lib ----- PGP key |
|
Создано: 29 ноября 2010 17:29 · Поправил: Hexxx · Личное сообщение · #29 |
|
Создано: 29 ноября 2010 18:24 · Личное сообщение · #30 |
. 1 . 2 . 3 . 4 . >> |
eXeL@B —› Программирование —› Вопрос по Си программированию |