What happens, memory-wise, when I call a function from another function?
The clue is in those last two lines:
    ErrorResponse::componentNotFound(instruction).output(this-&gt;serial);
    TerminationResponse(instruction.commandId, 0xFF).output(this-&gt;serial);

Let's tear them apart and see what they actually do.
ErrorResponse::componentNotFound(instruction).output(this-&gt;serial);

Call the static function componentNotFound with your instruction, then take the object that is returned, and call the output() method on it passing this-&gt;serial as a parameter.
The hint there is take the object that is returned.
componentNotFound() returns an object. That object has to be stored somewhere. That &quot;somewhere&quot; is on the stack.  And stack space is allocated during the function preamble.  That's the bit of code that runs at the start of the function allocating stack, pushing registers to the stack, etc.
The same happens in the second line:
TerminationResponse(instruction.commandId, 0xFF).output(this-&gt;serial);

Create a new TerminationResponse object and call the output method.
All that goes on the stack.
It's not the calling of the function that is using the memory, it's what the function is doing that is using the memory.