The following fields are:
VIRT = Virtual Memory available = Real Memory + Swap Area.
RES = Residential Memory = Amount of memory existing in core memory.
SHR = Shared Memory = Code data that is shared (read only) across more than one process.
CODE = Code Memory = code/executable memory.
DATA = Data Memory = memory holding variables.
%MEM = % of (total usable) memory currently available.
So, I wouldn't expect VIRT, RES,SHR,CODE,or %MEM to change much at all for only one type of CPU bound process. Maybe DATA would move minimally as new variables are acquired/used.
You can fins more information on these labels/meaning by looking into the top source code, inside the linux doc system "aka: man top", as well as in /usr/src/kernel/Docs, or goto URL http://linux.die.net/man/1/top
As you correctly pointed out, the linux kernel will usually use all of available free memory rather than waste time cleaning up (freeing memory allocation tables) or initialing (possibly zeroing) used memory - it is more efficient this way (as measured by total execution time) for each process/thread execution.
You can see how the memory management will handle memory requests by the memory size block allocations as per slab in /proc fs. Have a look i.e. cat /proc/slabinfo and cat /proc/meminfo for more information of memory relationships.
Hope this assists you.