Помогите оптимизировать код зачистки

Тема в разделе "WASM.WIN32", создана пользователем ALLeX, 4 апр 2008.

  1. ALLeX

    ALLeX Member

    Публикаций:
    0
    Регистрация:
    21 окт 2004
    Сообщения:
    141
    Адрес:
    Ukraine
    На это страшно смотреть... А учитывая то, что в реальной проге указатели добываются из структуры - вообще мрак. :o( Можно ли как нибудь по другому?

    Код (Text):
    1.     mov eax, lpMem1
    2.         or        eax, eax
    3.         jz        @F
    4.     invoke  HeapFree, hHeap, NULL, eax
    5. @@:
    6.     mov eax, lpMem2
    7.         or        eax, eax
    8.         jz        @F
    9.     invoke  HeapFree, hHeap, NULL, eax
    10.         ...
    11. @@:
    12.     mov eax, lpMemN
    13.         or        eax, eax
    14.         jz        @F
    15.     invoke  HeapFree, hHeap, NULL, eax
    Может забить проверку на 0? Чем чревато, кроме матюков HeapFree?
     
  2. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    Ну судя по всему ничем не грозит. Код RtlHeapFree
    Код (Text):
    1. text:7C91043D                 push    0A0h
    2. .text:7C910442                 push    offset dword_7C910570
    3. .text:7C910447                 call    sub_7C90EDC2
    4. .text:7C91044C                 mov     edi, [ebp+arg_4]
    5. .text:7C91044F                 mov     [ebp+var_38], edi
    6. .text:7C910452                 xor     ebx, ebx
    7. .text:7C910454                 mov     [ebp+var_1D], bl
    8. .text:7C910457                 mov     [ebp+var_1E], 1
    9. .text:7C91045B                 mov     esi, [ebp+arg_C]
    10. .text:7C91045E                 cmp     esi, ebx
    11. .text:7C910460                 jz      loc_7C910566
    12. .....
    13. .text:7C910566 loc_7C910566:                           ; CODE XREF: RtlFreeHeap+23j
    14. .text:7C910566                                         ; RtlFreeHeap+2184Ej ...
    15. .text:7C910566                 mov     al, 1
    16. .text:7C910568
    17. .text:7C910568 loc_7C910568:                           ; CODE XREF: RtlFreeHeap+A36j
    18. .text:7C910568                                         ; RtlFreeHeap+16470j ...
    19. .text:7C910568                 call    sub_7C90EE02
    20. .text:7C91056D                 retn    0Ch