1. A method of detecting inefficient use of virtual memory by an application that is programmed using memory pointers, said method comprising: selecting a first heap from a list of tracked heaps; identifying allocated memory blocks within the first heap; determining a first total as a sum of sizes of the identified, allocated memory blocks; determining a second total as a sum of unallocated, NULL-filled bytes within the first heap that are not located outside outermost memory block addresses in each range of committed memory in the first heap; determining a ratio of the first total and the second total; generating a memory profile corresponding to the ratio comprising assigning each of the identified, allocated memory blocks to a size category and determining, for at least one selected size category, a number of the identified, allocated memory blocks of the selected size category that are located next to at least one other identified, allocated memory block that is assigned to a size category other than the selected size category; and generating at least one memory profile suggestion based upon the determined ratio comprising suggesting that the memory blocks defined in at least one of the size categories be allocated from an additional heap dedicated to blocks of a particular size category.