Ok, I figured out the problem. When there is no more memory available, then we go on anothe path of runtime execution which tries at each failed allocation to coalesce the memory and of course each time it fails to find any space. When this happens, it can still allocate some memory in the C memory area, but for each single allocation, it goes through the all Eiffel memory to see if there is an available piece of memory that we could get. This is why it then get very slow. I would say we could improve the behavior by either preventing search in the Eiffel list, if GC is disabled and the last search was unsuccessful. Or we could say, don't look in the C memory at all in this situation but that might be bad (since we have quite a few available bytes in there).