Boost logo

Boost Users :

From: David Abrahams (dave_at_[hidden])
Date: 2004-08-23 19:33:01

"Mark Storer" <MStorer_at_[hidden]> writes:

>> No it is not. Even if you aren't throwing due to memory starvation,
>> you could run out of memory during unwinding, when the exception is
>> copied. That leads you directly to terminate(). Do not pass Go; do
>> not collect $200.
> Venturing a little far afield, but one technique I've heard of is to
> grab a block, so you can release it in low-memory situations (or just
> every time you throw). This ensures (in theory) that you'll have
> enough memory to copy your exception, create your strings, and so on.
> If you manage to recover, you just grab another block ("prime the
> pump") and soldier bravely forward.
> Given STL's habit of allowing people to specify an allocator, you
> could even go so far as to build a custom allocator that worked on
> some pre-allocated block of memory for your exceptions (strings,
> vectors, whatever you deem necessary).
> Either way, you'll run out of memory a little earlier (not a big issue
> in many environments), but you _will_ get to pocket the $200.

Maybe. You can still exhaust your pre-allocated buffer. There's no
need to play with fire here; it doesn't buy you much and it's easy to

Dave Abrahams
Boost Consulting

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at