Co jest szybsze makro czy funkcja inline?

0

Witam,
Jak w temacie co jest szybsze makro:
#define alias kawałek_kodu (w moim przypadku assemblerowego)
czy funkcja inline:

__inline__ void enable_irq_in_arm(void) 
{
__asm__ __volatile__{....

Z góry dziękuję za odpowiedź.

0

Nic nie jest szybsze, ale jedno ale... Makra są rozwijane przez preprocesor i w ich przypadku masz pewność, że zostaną rozwinięte. Natomiast funkcje inline są rozwijane przez kompilator i w ich przypadku nie masz pewności, że zostaną rozwinięte.

0

Potencjalną wadą makr jest wydłużenie czasu kompilacji - jeżeli preprocesor rozwinie makra i okaże się, że po rozwinięciu kod jest 5x większy to kompilacja też raczej będzie znacznie dłuższa.

0

Najprostszym rozwiązaniem będzie po prostu sprawdzić. Makra mają swoje wady (np. gdy chcesz użyć zmienna++), funkcje ogólnie zmniejszają ryzyko pomyłki. Ja bym po prostu zaufał kompilatorowi, że zrobi tę funkcję inline, szczególnie przy kompilowaniu z optymalizacjami. Po prostu sprawdź przy całym programie, czy zmiana funkcji na makro ma sens (jeżeli nie ma zauważalnej różnicy np. przy użyciu funkcji time, to bym zostawił funkcję). Niekiedy inline może mieć także skutki negatywne, np. poprzez gorsze cache'owanie instrukcji, kompilator może to lepiej zbalansować.

1 użytkowników online, w tym zalogowanych: 0, gości: 1