Deutsch   English   Français   Italiano  
<87zfrjvqp6.fsf@bsb.me.uk>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Ben Bacarisse <ben@bsb.me.uk>
Newsgroups: comp.lang.c
Subject: Re: realloc() - frequency, conditions, or experiences about relocation?
Date: Mon, 17 Jun 2024 10:55:33 +0100
Organization: A noiseless patient Spider
Lines: 44
Message-ID: <87zfrjvqp6.fsf@bsb.me.uk>
References: <v4ojs8$gvji$1@dont-email.me> <875xu8vsen.fsf@bsb.me.uk>
	<v4ovqf$j5hq$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain
Injection-Date: Mon, 17 Jun 2024 11:55:34 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="f69b21fe46179def9aae9c77317b77e3";
	logging-data="615472"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX199v8u6tLRfSX+cYrx+9x9xbaFUdoCmeCI="
User-Agent: Gnus/5.13 (Gnus v5.13)
Cancel-Lock: sha1:StE9LcOr9N8aN8/cCOP2wtfcoh8=
	sha1:Oll7KiAojbwOqTdghjGzVCJD4AM=
X-BSB-Auth: 1.d5809cbd62f99a5f327a.20240617105533BST.87zfrjvqp6.fsf@bsb.me.uk
Bytes: 3039

Malcolm McLean <malcolm.arthur.mclean@gmail.com> writes:

> On 17/06/2024 10:18, Ben Bacarisse wrote:
>> Janis Papanagnou <janis_papanagnou+ng@hotmail.com> writes:
>> 
>>> In a recent thread realloc() was a substantial part of the discussion.
>>> "Occasionally" the increased data storage will be relocated along
>>> with the previously stored data. On huge data sets that might be a
>>> performance factor. Is there any experience or are there any concrete
>>> factors about the conditions when this relocation happens? - I could
>>> imagine that it's no issue as long as you're in some kB buffer range,
>>> but if, say, we're using realloc() to substantially increase buffers
>>> often it might be an issue to consider. It would be good to get some
>>> feeling about that internal.
>> There is obviously a cost, but there is (usually) no alternative if
>> contiguous storage is required.  In practice, the cost is usually
>> moderate and can be very effectively managed by using an exponential
>> allocation scheme: at every reallocation multiply the storage space by
>> some factor greater than 1 (I often use 3/2, but doubling is often used
>> as well).  This results in O(log(N)) rather than O(N) allocations as in
>> your code that added a constant to the size.  Of course, some storage is
>> wasted (that /might/ be retrieved by a final realloc down to the final
>> size) but that's rarely significant.
>> 
> So can we work it out?

What is "it"?

> Let's assume for the moment that the allocations have a semi-normal
> distribution,

What allocations?  The allocations I talked about don't have that
distribution.

> with negative values disallowed. Now ignoring the first few
> values, if we have allocated, say, 1K, we ought to be able to predict the
> value by integrating the distribution from 1k to infinity and taking the
> mean.

I have no idea what you are talking about.  What "value" are you looking
to calculate?

-- 
Ben.