Blocks are numbered arrays, heap items are singletons. As Franj said, tags.
Background: The heap was originally created as a place where the system could create elements outside of normal element memory. For instance, if you had a CTRIO module, we needed a place to automatically create the structures associated with it. That worked well, so we made instructions that needed structures (like PID or TASK) do the same thing. Eventually we made it where users could create items there as well.
While the system creates lots of stuff on the heap for me, about the only time I create something directly on the heap is if I need a big string for something like a comm buffer. I usually create a 1024 byte string with a name like CommBuff, rather than a block named SLL0.
The bottom line is that you may never use it directly, and that's fine.