Оптимизация 10-и call'ов

Тема в разделе "WASM.BEGINNERS", создана пользователем OlegA11, 12 мар 2006.

  1. OlegA11

    OlegA11 New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2006
    Сообщения:
    102
    Народ, прошу вашей помощьи. В оптимизации кода, я разбираюсь не слишком хорошо.

    У меня сложилась такая ситуация, практически подряд идут 10 call'ов send (6 подряд, а 4 чередуются с recv)

    Естественно, они все вызываются с разными аргументами, это всё занимает очень много места. В плюс ко всему ещё практически в каждом call'е аргументы типа push offset <p>, где <p> переменная.

    Теперь вопрос: Как это всё можно оптимизировать?



    PS: Прочитал несколько статей по оптимизации, но они в основном дают советы типа - "вместо mov eax,0 , следует писать xor eax,eax" и т.д но они не применимы к моему случаю...

    PPS: Имеется в виду оптимизачия по размеру кода, время выполнения здесь не критично.
     
  2. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Оптимизировать надо циклы, а 10 подряд идущих вызовов процедур - это копейки.
     
  3. OlegA11

    OlegA11 New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2006
    Сообщения:
    102
    Вот с циклами то у меня всё в порядке.

    Тем более, что время выполнения не критично.
     
  4. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    ну может быть можно сделать так:

    организовать вызов циклически, а параметры брать каждый раз из масива.

    к примеру



    .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
     
  5. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Поставь свои переменные в секции дата последовательно в порядке передачи в ф-цию, и замени 10 вызовов циклом из 10 проходов


    Код (Text):
    1. .data
    2.     var1    dd ?
    3.     var2    dd ?
    4.     ....    
    5.     var10   dd ?
    6.  
    7. .code
    8.  
    9.  
    10.     lea   ebx,var1
    11. _loop:
    12.     push  ebx
    13.     call  foo
    14.     add   ebx,sizeof var1
    15.     cmp   ebx,offset var10
    16.     jle   _loop




    Примерно такой принцип.

    Переменные компоновать по одинаковости размера.
     
  6. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    Не знаю как по размеру, но по скорости будет намного быстрее , если вначале забить стек параметрами, а потом вызывать функции.

    НЕ ТАК:

    push xx

    call win32

    push xx

    call win32

    ...

    А ТАК:

    push xx

    push xx

    call win32

    call win32

    Взято отсюда: http://www.wasm.ru/article.php?article=dznotes