there are I think quite a few topics discussing this...
the one to start with is:
perhaps the tip that is least obvious, is making sure execution is done in the right order.
the reason is simply, if you do something that is required to be executed on the next cycle,
the the previous value is stored in ram..
on a large patch, thats not kept this in mind, this can add up really quickly
(also yes, modulation sources/targets and presets can eat memory fast - so minimise these)
generally with DSP (actually most coding ) its best to try to keep in mind 'best practice' as you go along like those above, rather than trying to come back and fix things later.
ok, you do have to avoid premature optimisation... thats why i say best practices, rather than optimise as you go along.
of course, at the end of the day Axoloti is not like your desktop, its ram/cpu is limited, thats part of the fun, seeing how much we can squeeze out of a small/inexpensive thing.