version(ctfe)
Fawzi Mohamed
fmohamed at mac.com
Mon Oct 19 12:54:39 PDT 2009
On 2009-10-19 18:19:34 +0200, Andrei Alexandrescu
<SeeWebsiteForEmail at erdani.org> said:
> dsimcha wrote:
>> == Quote from Andrei Alexandrescu (SeeWebsiteForEmail at erdani.org)'s article
>>> Leandro Lucarella wrote:
>>>> Andrei Alexandrescu, el 19 de octubre a las 08:38 me escribiste:
>>>>> For relatively large chunks of memory, the GC keeps a control block.
>>>>> We could add a member size_t requestedSize that keeps the size that
>>>>> was requested with an allocation/reallocation call. The GC can take
>>>>> initiative in overallocating memory and expose primitives such as
>>>>> requestedSize (how much did the program ask for?) and capacity (how
>>>>> much is really allocated?). With that API, it is possible to
>>>>> implement ~= efficiently.
>>>> That would mean moving the overhead of arrays to the GC, but that overhead
>>>> will be present for *all* objects, arrays or not, so I don't think it will
>>>> be a good idea...
>>> I forgot to mention that ~= would also have a means to communicate the
>>> GC to overallocate. My point is simple: the problem is that slices don't
>>> store enough info. That info could get in the memory control block.
>>
>> This is the part of this thread I'm not understanding: Isn't this info stored
>> already? The only problem is querying it is slow. See GC.sizeOf(),
>> and bug 2900.
>> (2900 is fixed, but it's still slow, and there's still bug 2093.)
>> What are you
>> proposing that's different from the status quo?
>
> Sorry, I got confused a bit: you have the size in the array and you can
> get the capacity from the GC, just slowly. Let's sleep on this some
> more, it may not be impossible to find a growth scheme that works fast.
>
> Andrei
The problem with the current state, apart slow access to the capacity,
is an ownership problem: which of the possibly multiple slices owns the
data after the slice? what happens when multiple slices grow?
In some way the current state is the optimal solution with slice=array.
To improve on this the only way is (I think) to have slice!=array, and
this was basically what T[new] was all about (at least in my
understanding).
Ownership of data is a difficult problem with arrays, and clearly
T[new] and slices is more complex than having slice=array, I would be
tempted to say that on the whole having T[new] (or even a library
vector type, if T[new] does not improve upon what a library type does),
might be a good idea.
Fawzi
More information about the Digitalmars-d
mailing list