vector<> can probably never grow to it's maximum size!

Paolo Carlini pcarlini@suse.de
Wed Oct 20 09:53:00 GMT 2004


Dhruv Matani wrote:

>Actually, I think this would be useful after all. Consider the situation
>where th vector already has 1.2GB of memory, and wishes to expand more.
>Consider that the user does a push_back(). Now, the vector will try to
>allocate 1.2*2=2.4GB of memory. Currently, I think Linux supports only
>3GB data segment(heap) max.
>  
>
Why are you always considering only 32-bit machines?

>The push_back will throw even though it could have succeeded!
>With the patched allocator, it will now try to allocate slightly more
>than 1.2GB, and will succeed. Thus, we have presented a
>function(push_back) from failing.
>  
>
The point is not that doesn't make sense not doubling the request in low
memory (perhaps, you have to add limits, platform dependent...). The 
point is
that you do *not* detect that condition via the arithmetic overflow 
mechanism!
In the case you present above, __old_len * 2 = 2.4 GB, which does *not*
overflow 2^32 - 1. Therefore, your patch is flawed in any case.

Also, about the *small* allocations, are you aware of the fact that the old
SGI allocator had a 'reallocate' extension? Before devising newer, complex,
things, shouldn't we learn from that?

Paolo.



More information about the Libstdc++ mailing list