r175906 - Replace some typically large vectors with SmallVector.
Benjamin Kramer
benny.kra at gmail.com
Fri Feb 22 13:47:13 PST 2013
On 22.02.2013, at 22:42, Jordan Rose <jordan_rose at apple.com> wrote:
>
> On Feb 22, 2013, at 13:40 , Sean Silva <silvas at purdue.edu> wrote:
>
>> On Fri, Feb 22, 2013 at 1:29 PM, Benjamin Kramer
>> <benny.kra at googlemail.com> wrote:
>>> This may seem counter-intuitive but the POD-like optimization helps when the
>>> vectors grow into multimegabyte buffers. SmallVector calls realloc which knows
>>> how to twiddle virtual memory bits and avoids large copies.
>>
>> Is this optimization something that libc++ should be doing?
>
> I haven't looked but I would guess that libc++ uses is_trivially_movable/is_trivially_copyable instead of is_pod, and all of our isPODLike cases should be trivially copyable if not trivially movable.
Yes, our isPODLike is roughly equivalent to is_trivially_copyable (it actually uses that type trait as a baseline when compiling with clang). I'm not sure if libc++ is allowed to do the optimization, the standard sets tighter constraints. SmallVector does the resizing with realloc(3) when the type is pod-like (trivially copyable), std::vector uses operator new which doesn't have a realloc equivalent.
- Ben
More information about the cfe-commits
mailing list