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 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; and generating a memory profile corresponding to the ratio.