Great reply, thank you SkyRanger! I see... and I have now changed my OSR and Streamline/Streamsmooth settings somewhat:
OSR Max Frames: 40
OSR Min Frames:20
SLSS Max Frames: 35
SLSS Min Frames: 21
In OSR I'm using HeapMode "5" since "1" proved unstable. This leads me to the question whether you have ever found out when or on what systems HM=1 is running stable and when it is not? I know there are a million different PC configurations / hardwares possible. But maybe you have a suspicion? Really more my curiosity than actual necessity as HM=5 seems to be working great on my machine.
As to Streamline, I think I like the Streamsave function quite a bit, and the memory purging also seems like a sensible idea to me. But I have installed it only today, so I have no firm opinion on all that yet. I'll be watching out if I have any issues, along the lines you have said.
The reason(s) why FastMM4 (iHeapMode/iHeapAlgorithm 1) can fail is not really known. There are widespread reports that it is fixed for some people by a certain modification to how bashed patches are made, but that does not fix the issues for me (I don't even use a bashed patch). Given that FastMM4 is presumably well tested, the obvious candidate reasons would be either a bug in Oblivion (several possible kinds), a bug in my hooking of Oblivions heap, or a mismatch between the conventions used by Oblivions heap and FastMM4.
Oblivion bugs: The most likely candidates involve going past the end/beginning of a memory block, race conditions masked by the heaps locking, and built-in assumptions about allocation patterns. My suspicion is that multiple of those are going on in Oblivion. Find and fixing these kinds of issues is likely to be a nightmare. I am particularly suspicious of masked race conditions with regard to a few of the common reported minor errors associated with heap replacement.
Bug in my heap hooks: Most of major stuff clearly works or there would be much bigger problems, but there may still be issues with some of the more obscure stuff. The most likely candidates would be either my ignoring of the internal statistics Oblivion keeps about heap memory usage, or my ignoring of the flag that Oblivion passes to its allocation function that seems to determine what the appropriate response to out of memory conditions is.
Convention mismatch: There's not a lot of room for error here, as the basic conventions are fairly straightforward. There are a few ambiguities though: what to do with zero size allocations, what to do with reallocation calls with NULL for an old address, and what to do with reallocation calls with zero for a new size. From what I heard about the bashed patch issue it sounded like it was about some kind of mismatch in conventions. I did a little experimentation... all heaps OSR supports (including the native Oblivion heap) treat zero byte allocations as 1 byte alloctions, which matches the C standard. Reallocation to zero bytes has an inconsistent return value between heap algorithms though... it returns NULL for heap mode 2 and possibly for Oblivions fallback heap path, but does not return NULL for Oblivions normal heap or for FastMM4, and some versions of simpleheap1 and threadheap2. Failing to return NULL there is I believe (though am not at all certain) a violation of the C spec, though of course FastMM4 is not obliged to follow the C spec since it was written for Delphi. This may be a source of CTDs, and can be easily changed, though I'm not yet sure what the desirable behavior is at this point. The possibly inconsistent behavior of Oblivions native heap with regard to realloc(X,0) could conceivably be a source of vanilla Oblivion bugs as well.
Interestingly enough, what C documentation I can readily find gives ambiguous or contradictory descriptions of the correct behavior to realloc(NULL,0). When the native Oblivion heap is called with those parameters, it CTDs.
The StreamSave feature of Streamline is indeed very very useful. There are competitors that claim to offer that feature without the other stuff but I have never used those competitors so I can't really comment on them. I know nothing about streamline memory purging.