Just a little feedback too.
1) "does closing the *viewer*, release the memory" -- I could be wrong, but I do not think closing the viewer releases the memory because it thinks you may want to use it again?
2) "backups on /tmp"? -- I am not sure how you are getting backups to go to /tmp.  As far as I know they always go to $HOME/.bcast5.  If you see files like:

backup.prev_20230122_113922
backup.prev_20230122_114222
backup.prev
backup.xml

going to /tmp, then that could be a bug because I don't know how they got there.  Index files, marker files, snapshot files, and nested proxy files can be written somewhere else via Settings->Preferences, but not backups.
3) I have found that adding swap is a complete waste of time - it never works for me and just hangs (and that has been true for me since the 1980's!)
4) in Valgrind, I always look at these lines at the end of the file:
    ==128034== LEAK SUMMARY:
    ==128034==    definitely lost: 5,086 bytes in 40 blocks
    ==128034==    indirectly lost: 15,535,063 bytes in 1,143 blocks
    ==128034==      possibly lost: 350,864 bytes in 10 blocks

The "definitely lost" line is reasonable BUT "indirectly lost" seems astronomical.

so, something leaks but is it due to mussing free() on exit or also the case for normal operations ... it seems cache is involved, so may be I messed this up somehow. Does leak exist in previous cin-gg, like one from 2021 or 2020?
I am going to test this too.