On Tue, Jan 26, 2016 at 12:46 AM, Nitin Arora <[email protected]> wrote:
> I have couple of questions ( maybe dumb :-) ) regarding composite types:
>
> 1) For a vector of composite type defined as:
>
> immutable Point{T<:AbstractFloat}
> vstate :: Vector{T} # is a vector of length 6 which will be updated
> during code execution
> ct :: Vector{T} # is a vector of length 4 which will be updated
> during code execution
> id :: Int64 # is a constant input
> end
> N = 1000
> MyPoints = Array(Point,N)
>
> is it more useful / recommended to use immutable or mutable composite types
> ? I am mainly concerned with memory allocation and performance while
> accessing MyPoints.
Use immutable if you don't need to mutate it.
>
> 2) If we have a immutable composite type as:
> immutable Body{T}
> μ :: T
> end
>
> immutable PRB{T} #constant, doesn't change once set
> bodlist :: Vector{T} #vector of another immutable type
> end
> b = Body(1.0)
> prb = PRB([b])
>
> and we access the variables as follows, results in memory allocation:
>
> @time b.μ
>
> 0.000002 seconds (5 allocations: 176 bytes)
>
> @time prb.bodlist[1].μ
>
> 0.000004 seconds (6 allocations: 192 bytes)
>
>
> why is there a memory allocation every-time I access these variables ? (both
> for nested and the un-nested case)
And don't use @time in global scope like this.
>
> thanks for all the help,
> Nitin