Okay, it makes sense that since these are just pushed/popped with the stack frames, any memory copies come from register spilling at the function boundaries. Do the variables of the Workspace struct live in registers if theres only a few of them? I guess I’m not clear on the relative performance of a stack-allocated struct vs a heap-allocated struct. My intuition is that when Workspace fits in registers it’s basically free on the stack; once it the struct gets large and exceeds available registers, I’m better having it allocated on the heap and just having a reference to it being passed on the stack. Does this sound right, or am I misunderstanding how this works?