John is right that if you change to
B=fill!(Array(Vector{Int},5,5),Int64[])
then you don't see the weird allocations. (Note: you probably really want
B = Vector{Int}[Int[] for i = 1:5, j = 1:5]
so each element of B is independent.)
Still, this one should win some kind of prize for "strangest allocation result
of 2014." Where would you like your plastic pink elephant mailed to :-)?
--Tim
On Monday, December 01, 2014 06:45:33 PM Yijing Wu wrote:
> Sorry it seems that I simplified my problem too much in the previous code.
> Actually I am running something similar to the following, and I run it as a
> function and it starts to have allocation since i=512. I am really unsure
> if it's my coding problem(so it can be improved to 0 bytes) or it is
> natural in the system that allocations appear. Thank you so much!
>
> function test()
>
> B=fill!(cell(5,5),Int64[])
>
>
> for i=1:513
>
> push!(B[2,3],i)
>
> end
>
>
> T=zeros(Int64,513)
>
>
> for i=1:513
>
> @time T[i]=B[2,3][i]
>
> println(T[i])
>
> end
>
> end
>
>
>
> 在 2014年12月1日星期一UTC-6下午7时24分31秒,John Myles White写道:
>
> > Did you run this inside a function? If not, your results are not going to
> > be useful indicators of how code will perform inside a function.
> >
> > Inside of a function body, I see 0 bytes being allocated.
> >
> > -- John
> >
> > On Dec 1, 2014, at 4:53 PM, Yijing Wu <[email protected] <javascript:>>
> > wrote:
> >
> > Hi all, I found a strange problem about a very simple code in julia and
> > hopefully I can get some help from you, here is the code:
> >
> >
> > B=[1:1000]
> >
> > T=zeros(Int64,1000)
> >
> > for i=1:1000
> >
> > @time T[i]=B[i]
> >
> > println(T[i])
> >
> > end
> >
> >
> > And when I run the code, the @time shows that it require 48 bytes
> > allocation when i is larger than or equal to 512, and 0 bytes when
> > smaller. Is this a problem that can be improved or I have to accept that
> > it is designed to take some allocations when larger than 512?
> >
> >
> > Thanks a lot for your help!