Hey John,
The "GetID" and "GetFeatureValue" "leaks" are by design (it's not a leak -- it's caching). The memory will stick around for the entirety of the process. When the functions are called again they use that allocated memory. Yes, the memory is also sometimes "freed" and reloaded depending on the circumstances. We keep the memory around for the obvious reason: CPU time is expensive and memory is cheap (especially the tiny amount of memory we use).
The ProductDetails class also keeps memory around. Again, there's a difference between caching data and leaking data, but automated tools often aren't smart enough to make that distinction -- at least not without the source code in front of them (and even then, the tools have a tendency to misclassify).
We'll look into the other functions you've reported and see if we can reproduce it here. If we can find the leaks we'll fix them. We might be back to ask for ways to reproduce cases where you see TurboActivate "leaking like a sieve". (Can you put together a small example that reproduces that behavior? That is, where you can reproduce memory leaking with function calls and not hitting a "plateau" of no new memory "leaked"? Because if you hit a plateau it means the memory you were seeing "leaked" was really just cached data, and after a certain point the cache won't grow any larger because it doesn't need to.)
>> " We need some kind of TA_Terminate() or TA_ReleaseResources() function to permit these resources to be released back to the operating system upon conclusion of the program."
That's redundant and replicates what the underlying operating system already does (and does quicker & better). Namely, freeing the heap when the process closes.
Yes, TurboActivate loads data into memory and keeps it around until the process closes, at which point the OS cleans up all the heap data associated with your process (including TA data).
Hence talking about false positives. Automated tools are often too "limited" to understand the difference between cached and "leaked" data.