Should GC.realloc(null, N) be the equivalent of GC.calloc or GC.malloc?
Ali Çehreli via Digitalmars-d
digitalmars-d at puremagic.com
Thu Jul 17 16:51:03 PDT 2014
On 07/17/2014 03:35 PM, Rainer Schuetze wrote:
> On 17.07.2014 23:52, Ali Çehreli wrote:
>> When called with an existing buffer, GC.realloc conditionally clears the
>> newly extended part of the memory. An excerpt from druntime/src/gc/gc.d:
>>
>> void *realloc(void *p, size_t size, uint bits = 0, size_t *alloc_size =
>> null, const TypeInfo ti = null) nothrow
>> {
>> // ...
>>
>> if (p !is oldp && !(bits & BlkAttr.NO_SCAN))
>> {
>> memset(p + size, 0, *alloc_size - size);
>> }
>>
>> return p;
>> }
> >
> > (Disclaimer: Although undocumented, I assume that clearing the memory
> > is an intended feature of GC.realloc.)
> >
>
> It clears the memory beyond the requested size. This is usually not
> accessible to the user (at least if he didn't provide the alloc_size
> parameter).
Ah! You're right. My brain is not working properly lately.
However, this side question that need not be answered remains: If I
started with GC.calloc, shouldn't GC.realloc give me memory that is
cleared? Or at least don't I deserve a GC.recalloc()?
But wait: Do I want to complicate realloc even further? NO! :p
Ali
More information about the Digitalmars-d
mailing list