Вызов API

Тема в разделе "WASM.HEAP", создана пользователем qwe8013, 10 авг 2010.

  1. qwe8013

    qwe8013 New Member

    Публикаций:
    0
    Регистрация:
    28 май 2009
    Сообщения:
    198
    Собственно вопрос простой:
    hll компиляторы делают вызов api так:
    Код (Text):
    1. call jmp_api
    2.  
    3. ...
    4.  
    5. jmp_api:
    6. jmp [api]
    а не так:

    Код (Text):
    1. call [api]
    какой в этом смысл (кроме нескольких сэкономленных байт в случае многократного вызова этой функции)?
     
  2. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
    это кто так делает?

    call ds:[iat]
     
  3. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    я тоже долго не мог понять почему так, но это сделано для возможности реализации Incremental Linking
     
  4. qwe8013

    qwe8013 New Member

    Публикаций:
    0
    Регистрация:
    28 май 2009
    Сообщения:
    198
    fsd
    Ну например Delphi.
    Только не надо здесь холивар устраивать Delphi я привёл для примера.
     
  5. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    qwe8013
    Вообще-то байт может быть далеко не несколько. Особенно если в образ будут добавлены релоки: делать фиксап для каждой функции или для каждого вызова каждой функции.
    P.S. И в случае релоков это ещё скажется на скорости загрузки образа.
     
  6. qwe8013

    qwe8013 New Member

    Публикаций:
    0
    Регистрация:
    28 май 2009
    Сообщения:
    198
    l_inc
    Ну, скорость загрузки не очень заметна.
    А если релоков не будет, то это безполезно.
     
  7. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Во-первых, это ес-но уже не раз обсуждалось, см. к примеру Лишние переходы - зачем они?. Во-вторых, все же главная причина использования переходов это не экономия байтиков и не сокращение числа релоков для ускорения ребейза в рантайме, а упрощение\ускорение линковки модулей при сборке приложения, особенно в режиме incremental, о чем собс-но уже сказал ntcdm
     
  8. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    дада, уберите Incremental Link в настройках проекта и увидите что компилятор будет реализовывать вызовы как call [api]