Сборка - Когда используется макрос (с точки зрения эффективности)? - PullRequest
0 голосов
/ 24 марта 2012

Когда предпочитаете использовать макрос, чтобы добиться большей эффективности программы?Как я понял, когда мы используем макрос, мы тратим больше двоичного кода, и мы теряем некоторое время выполнения.Поэтому он предпочитает писать соответствующий макрос в коде.

(я знаю о преимуществах макроса для простого кода для программиста, я спрашиваю об эффективности)

Спасибо

Ответы [ 4 ]

2 голосов
/ 24 марта 2012

Эффективен ли макрос?Почему бы не быть?Это просто спасает вас от повторного написания одного и того же кода.Допустим, в Windows вы посылаете WM_COMMAND довольно много раз, вместо того, чтобы писать:

mov ax, HiWord
ror eax, 16
mov ax, LoWord

каждый раз, вы помещаете его в макрос:

  MAKEDWORD MACRO LoWord,HiWord
    mov ax, HiWord
    ror eax, 16
    mov ax, LoWord
  ENDM

Теперь все, что вам нужноdo is: MAKEDWORD somenumber, somenumber и результат будет в eax для передачи в функцию.Препроцессор заменит все экземпляры MAKEDWORD своим кодом.Недостатком (по крайней мере, мне так кажется) использования макросов является то, что если вы будете использовать его МНОГИЕ раз, вы получите «раздувание кода», вам лучше изменить макрос на функцию, если вы собираетесь использовать его много раз..

1 голос
/ 24 марта 2012

С текущими процессорами (по крайней мере, x86-подобными) я не могу представить случай, когда макрос дает эффективность, в смысле ускорения выполнения.Можно сравнить, какие трюки используются компиляторами для генерации кода, эффективного для конкретного процессора - такое же действие можно реализовать с изменением команд, регистров и т. Д. С помощью макроса вы придерживаетесь конкретных регистров, команд, их порядка;все это не дает эффективности.Заметным исключением является случай, когда макрос является реализацией команды, которая не известна конкретному ассемблеру.

Вместо этого в настоящее время можно использовать промежуточный язык (как это делает LLVM) при выводе некоторого макропроцессора и их преобразовании в машинный язык.в соответствии с требуемым тюнингом.Но это не само использование макроса:)

0 голосов
/ 13 марта 2016

Вы должны использовать макрос, когда последовательность инструкций очень короткая, потому что он сохраняет некоторые циклы от call и return.

0 голосов
/ 25 марта 2012

Это не имеет ничего общего со сборкой.Макросы предназначены для сохранения набора текста, который в некоторых случаях позволяет вам писать больше кода за день.Или отладьте больше кода за день.Или поддерживать больше кода в день.Вы можете использовать макросы в C так же, как ASM, по тем же причинам.Точно так же вы можете использовать функции, в некоторых случаях эти функции обходятся вам во время выполнения с использованием ветвления и стека поверх макроса, но ваши макросы могут быть написаны так, что они вам тоже чего-то стоят.

Если не руководствоваться стандартами программирования компании или проекта, то это сводится к индивидуальным предпочтениям.некоторые программируют линейно, и однажды какой-то блок кода (не имеющий ничего общего с языком) набирается дважды более чем в одном месте, и есть риск, что он может быть изменен, в зависимости от того риска, который он может поместить в макрос илифункция.Часто просто вырезайте и вставляйте первый проход в программу, и если при отладке она должна измениться, то создается функция, а затем несколько мест заменяются функцией.Другая крайность находится вне ворот, чтобы придумать множество полезных функций.служебные функции, распределенные по служебным функциям и т. д. Таким образом, в конечном итоге основная программа может быть длиной 5 строк, каждая функция имеет длину, равную дюжине строк, и все они вызывают другие вспомогательные функции.Реальность где-то посередине.Все сводится к типизации и побочным эффектам набора, начальной разработки, отладки и обслуживания в будущем.Чем меньше вы печатаете, тем быстрее вы выполняете эти вещи.

...