Народ, прошу вашей помощьи. В оптимизации кода, я разбираюсь не слишком хорошо. У меня сложилась такая ситуация, практически подряд идут 10 call'ов send (6 подряд, а 4 чередуются с recv) Естественно, они все вызываются с разными аргументами, это всё занимает очень много места. В плюс ко всему ещё практически в каждом call'е аргументы типа push offset <p>, где <p> переменная. Теперь вопрос: Как это всё можно оптимизировать? PS: Прочитал несколько статей по оптимизации, но они в основном дают советы типа - "вместо mov eax,0 , следует писать xor eax,eax" и т.д но они не применимы к моему случаю... PPS: Имеется в виду оптимизачия по размеру кода, время выполнения здесь не критично.
ну может быть можно сделать так: организовать вызов циклически, а параметры брать каждый раз из масива. к примеру .data array dd 1,2,3,4,5 .code start: mov ecx, 5 mov edi, offset array x3: push dword ptr [edi] call blah_blah add edi,4 loop x3
Поставь свои переменные в секции дата последовательно в порядке передачи в ф-цию, и замени 10 вызовов циклом из 10 проходов Код (Text): .data var1 dd ? var2 dd ? .... var10 dd ? .code lea ebx,var1 _loop: push ebx call foo add ebx,sizeof var1 cmp ebx,offset var10 jle _loop Примерно такой принцип. Переменные компоновать по одинаковости размера.
Не знаю как по размеру, но по скорости будет намного быстрее , если вначале забить стек параметрами, а потом вызывать функции. НЕ ТАК: push xx call win32 push xx call win32 ... А ТАК: push xx push xx call win32 call win32 Взято отсюда: http://www.wasm.ru/article.php?article=dznotes