A macro is just short hand. A subrountine is "called."
Subroutines can save memory by reducing repeated code, but take more time because you have to push arguments and return addresses, and push the result and pop back.
A macro is the code literally inserted where you put it. It doesn't save any memory but is as fast as the bit of code you put there, saves typing, and is easier to read.
For example, if I define a macro
#define TOGGLE_PIN1 PORTD.1=0;PORTD.1=1;PORTD.1=0
and put it in my code like so
putsf("I'm going to toggle PIN1 now");
TOGGLE_PIN1;
putsf("PIN1 was toggled");
it would be exactly the same, to the processor, as
putsf("I'm going to toggle PIN1 now");
PORTD.1=0;PORTD.1=1;PORTD.1=0;
putsf("PIN1 was toggled");
j.