ttwang@polyslo.CalPoly.EDU (Thomas Wang) (09/04/89)
When memory on the free store runs out, operator 'new' will call the function
pointed by _new_handler. When _new_handler finishes, I think the new
operator should try another time to allocate the storage. This is because
the _new_handler may have deleted some unused storage space, so now there
is enough space after all.
On page 93 of "The C++ Programming Language", Bjarne suggested we re-define
the 'new' operator. I don't think this is practical. Re-defining the
'new' operator is difficult, and non-portable across systems.
I raised this issue, because the _new_handler can be used to do garbage
collection. Right now, even after garbage collection, the new operator
will still return a null pointer.
-Thomas Wang ("I am, therefore I am."
- Akira )
ttwang@polyslo.calpoly.eduttwang@polyslo.CalPoly.EDU (Thomas Wang) (09/05/89)
ttwang@polyslo.CalPoly.EDU (Thomas Wang) writes: >When memory on the free store runs out, operator 'new' will call the function >pointed by _new_handler. When _new_handler finishes, I think the new >operator should try another time to allocate the storage. This is because >the _new_handler may have deleted some unused storage space, so now there >is enough space after all. I just did some testing. The behavior of 'new' is different for cfront 1.2 and g++ 1.34. Cfront will contineously call the _new_handler until some memory is freed. You can set_new_handler(0); to terminate the loop. If enough memory is freed, the object will be allocated with no problem. On the other hand, g++ 1.34 will call _new_handler only once. A null pointer is returned even if enough memory is freed. This looks like a bug. -Thomas Wang ("I am, therefore I am." - Akira ) ttwang@polyslo.calpoly.edu