Pop quiz [memory usage]

Steve Schveighoffer schveiguy at yahoo.com
Sun Jun 7 16:30:01 PDT 2009


On Mon, 08 Jun 2009 00:34:10 +0400, Denis Koroskin wrote:

> On Sun, 07 Jun 2009 15:47:52 +0400, Steve Schveighoffer
> <schveiguy at yahoo.com> wrote:
> 
>> On Sat, 06 Jun 2009 21:59:39 -0700, Sean Kelly wrote:
>>
>>> Steve Schveighoffer wrote:
>>>> On Sat, 06 Jun 2009 12:03:03 -0700, Sean Kelly wrote:
>>>>
>>>>> bearophile wrote:
>>>>>> Sean Kelly:
>>>>>>> Particularly in D2 where append
>>>>>>> operations on arrays are probably less common as a result of
>>>>>>> string being invariant.
>>>>>> They aren't much common maybe because they are currently dead-slow.
>>>>>> Appending to an immutable string is a common operation. But I guess
>>>>>> Array appenders will get more common...
>>>>> Yes but appending to an immutable string is never performed in
>>>>> place, which is the only time the extra space reserved by
>>>>> newCapacity matters.
>>>>>   I suspect the memory wasted by newCapacity is more of an issue
>>>>>   than
>>>>> any time savings it provides.
>>>>
>>>> What gave you that idea?
>>>>
>>>> void main()
>>>> {
>>>>   auto str1 = "hello".idup;
>>>>   auto str2 = str1;
>>>>   str1 ~= "world";
>>>>   assert(str1.ptr == str2.ptr);
>>>> }
>>>
>>> auto str1 = "hello".idup;
>>> auto str2 = str3 = str1;
>>> str2 ~= " world";
>>> str3 ~= " garbage";
>>>
>>> Doesn't seem terribly safe to me.
>>
>> Oh, I know.  It's a long-standing issue with immutability, but I think
>> if appending gets fixed as Andrei suggests, this should be fixed as
>> well.  I was just saying that your statement about immutable data never
>> being appended in-place was false.
>>
>> -Steve
> 
> Your proof relies on buggy behavior.

By-design behavior.  See http://www.digitalmars.com/d/2.0/
arrays.html#resize

poorly designed, perhaps, but it's by design.

My point was that there's no special treatment of immutable data (as was 
suggested by Sean), it suffers from the same issues as mutable appending.

BTW, I'm not in favor of the current behavior, but I do think that if 
something is fixed for this array allocation issue, it should cover this 
problem as well.

-Steve



More information about the Digitalmars-d mailing list