(i was quite impressed that reverse(reverse(...)) didn't help either).

On Tuesday, 21 July 2015 20:11:35 UTC-3, andrew cooke wrote:
>
>
> deepcopy didn't.  i haven't actually tried copy.  hang on...  [computer 
> hangs; oom killer steps in].  nope!
>
> On Tuesday, 21 July 2015 20:08:33 UTC-3, Jameson wrote:
>>
>> does `copy` work? although `bytestring` also seems like a good method for 
>> this also. it seems wrong to me also that `match` is making a copy of the 
>> original string (if that is indeed what it is doing)
>>
>> On Tue, Jul 21, 2015 at 6:57 PM andrew cooke <and...@acooke.org> wrote:
>>
>>>
>>> string(bytestring(...)) seems to do it.  would appreciate any more 
>>> efficient solutions (and confirmation the analysis is correct - is this 
>>> worth filing as an issue?)
>>>
>>>
>>> On Tuesday, 21 July 2015 19:33:05 UTC-3, andrew cooke wrote:
>>>>
>>>>
>>>> well, this was fun...  the following code rapidly triggers the OOM 
>>>> killer on my machine (julia 0.4 trunk):
>>>>
>>>> s = repeat("a", 1000000)
>>>> l = Any[]
>>>> r = r"^\w"
>>>>
>>>> for i in 1:length(s)
>>>>     m = match(r, s[i:end])
>>>>     push!(l, m.match)
>>>> end
>>>>
>>>> note that: (1) the regexp is only matching one character, so the array 
>>>> l is at most a million characters long.
>>>>
>>>> what i think is happening (but this is only a guess) is that s[i:end] 
>>>> is being passed though to the c level regexp library as a new string.  the 
>>>> result (m.match) is then a substring into that.  because the substring is 
>>>> kept around, the backing string cannot be collected.  and so there's an 
>>>> n^2 
>>>> memory use.
>>>>
>>>> ideally, i don't think a new copy of the string should be passed to the 
>>>> regexp engine.  maybe i am wrong?
>>>>
>>>> anyway, for now, if the above is right, i need some way to copy 
>>>> m.match.  as far as i can tell string() doesn't help.  so what works?  or 
>>>> am i wrong?
>>>>
>>>> thanks,
>>>> andrew
>>>>
>>>

Reply via email to