[Ltrace-devel] [RFC 1/5] vect: Fix vect_reserve for large count
Petr Machata
pmachata at redhat.com
Fri Oct 5 16:38:17 UTC 2012
edgar.iglesias at gmail.com writes:
> vect_reserve(struct vect *vec, size_t count)
> {
> if (count > vec->allocated) {
> - size_t na = vec->allocated != 0 ? 2 * vec->allocated : 4;
> + /* Allocate 4 extra slots for growth. */
> + size_t na = count + 4;
> void *n = realloc(vec->data, na * vec->elt_size);
> if (n == NULL)
> return -1;
That changes performance characteristics of vect_pushback from O(1) to
O(n). What problem are you seeing that is fixed by this?
If we are that memory-tight, perhaps we could have a call like
vect_done, which would allocate a new buffer with exact number of slots,
copy stuff there, and release the old buffer (or keep it around for next
vect_init?). Or there could be a separate ctor taking slot count as an
argument, which we would use to pre-allocate things like value arrays,
where we have a guess on the number of elements. It depends on what
problem you are trying to solve.
Thanks,
PM
More information about the Ltrace-devel
mailing list