https://github.com/vlang/v/blob/master/vlib/v/tests/valgrind...
It has lots of comments and will give you a good picture.
For example:
x = [1, 2, 3] // is this stack or heap allocated?
foo(&x) // how does the compiler know if x needs to be ref counted or not?
return &x // is this valid or UB or a compilation error?