The information in this article applies to:
SYMPTOMSAfter calling CStringArray::Add() many times, unusually large amounts of memory become allocated to the application and not freed until the application terminates. This behaviour may be seen in the other array collection classes such as CObArray and CPtrArray as well. CAUSE
Each time a call to Add() is made, the array may grow. Memory needs to be
allocated to accommodate the new size of the array. The array is copied to
the new block of memory and the old memory is freed for re-use. The Visual
C++ run-time heap allocator doesn't return freed memory to the system but
instead marks the memory block as unused so that it can re-use the memory
later. RESOLUTION
A developer using an array data structure typically knows the size of the
array before allocating memory for it. However, if you don't know the size,
you must re-allocate the array as it grows. This means that a new memory
block must be allocated and the data from the old memory block must be
copied to the new block before the old memory block is freed. This can cost
time.
Here the array will be allocated an original 100 elements. When the 100
elements have been used and Add() is called for the 101st element, the
array memory block will be reallocated to handle an additional 100 elements
for a total of 200 elements.Alternatively, SetSize(0, 100) would cause the initial size for the array to be zero and an Add() would have to be done before any elements could be filled. This first Add() in this scenario would cause 100 elements to be allocated for use by the array. Additional query words: 1.00 1.50 1.51 2.00 2.10 2.50 3.00 4.00 fragment leak heap
Keywords : kbnokeyword kbMFC kbVC |
Last Reviewed: September 10, 1999 © 2000 Microsoft Corporation. All rights reserved. Terms of Use. |