Thanks for the reply. I assume from mutate you mean not changing type of the sub-variable (e.g "vstate" above) ? I plan to change the values inside that vector but the vector itself, both in length and type, will remain constant.
Nitin On Monday, January 25, 2016 at 10:23:21 PM UTC-8, Yichao Yu wrote: > > On Tue, Jan 26, 2016 at 12:46 AM, Nitin Arora <[email protected] > <javascript:>> 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 >
