Enables the allocation counter to be treated as a limit for the
current thread. When the allocation limit is enabled, if the
allocation counter counts down below zero, the thread will be sent the
AllocationLimitExceeded asynchronous exception. When this
happens, the counter is reinitialised (by default to 100K, but tunable
with the
+RTS -xq option) so that it can handle the exception
and perform any necessary clean up. If it exhausts this additional
allowance, another
AllocationLimitExceeded exception is sent,
and so forth. Like other asynchronous exceptions, the
AllocationLimitExceeded exception is deferred while the thread
is inside
mask or an exception handler in
catch.
Note that memory allocation is unrelated to
live memory, also
known as
heap residency. A thread can allocate a large amount
of memory and retain anything between none and all of it. It is better
to think of the allocation limit as a limit on
CPU time, rather
than a limit on memory.
Compared to using timeouts, allocation limits don't count time spent
blocked or in foreign calls.