The only thing that confused me is how it said we can know the location of the block after and before by calculating: address + address - Shouldn't this be? address + + 3 address - - 3
Well shit. I think you're right.
"As a general-purpose memory allocator, though, we can't get away with having no free implementation."
I have a belief that the future of software are short-lived programs that never free memory. Programs allocate and terminate. Short-lived program communicate with each other via blocking CSP-style channels (see Reppy's Concurrent Programming in ML).
If you could also educate me on why this is a bad idea I would appreciate.