Re: Estimating memory usage of expressions
- To: mathgroup at smc.vnet.net
- Subject: [mg109012] Re: Estimating memory usage of expressions
- From: Albert Retey <awnl at gmx-topmail.de>
- Date: Sat, 10 Apr 2010 06:53:49 -0400 (EDT)
- References: <hpkgl2$81m$1@smc.vnet.net> <hpml87$9r3$1@smc.vnet.net>
Am 09.04.2010 09:33, schrieb Nicola Mingotti: > The object "1" and the object "list containing only the element 1" are different > in nature so it's expectable they heve different Mathematica representation > and different Memory usage. > > I don't know the C representation for a Mathematica List or a Mathematica > Integer, i don't even know if they are public domain. > > Anyway, if you do > > ByteCount[{1}] => 56 > ByteCount[{1,2}] => 80 > ByteCount[{1,2,3}] => 104 > ByteCount[{1,2,3,4}] => 128 > > you see the difference is always 24 bytes. > > It tried to do a little experiment, the list data structure changes > when you add some elements : > > r = Table[RandomInteger[], {i, 100}]; > (ByteCount[r] - 32) / 24 => 100 > > r = Table[RandomInteger[], {i, 200}]; > (ByteCount[r] - 32) / 24 => 200 > > r = Table[RandomInteger[], {i, 250}]; > (ByteCount[r] - 32) /24 => 91/2 !!!! > > In the last result i would expect naively a result 250, > 91/2 tells me that things underwood are more sophisticated. > > Hope somebody can tell you more ;-) > The key word is PackedArray (search the documentation for ToPackedArray to learn more): ListPlot[Table[ {k, ByteCount[Table[RandomInteger[], {i, k}]]}, {k, 300} ]] Developer`PackedArrayQ[Table[RandomInteger[], {i, 249}]] Developer`PackedArrayQ[Table[RandomInteger[], {i, 250}]] ListPlot[Table[ {k, ByteCount[Developer`ToPackedArray[Table[RandomInteger[], {i, k}]]]}, {k, 300} ]] and then: Show[ListLinePlot[Table[ {k, ByteCount[ Developer`ToPackedArray[Table[RandomInteger[], {i, k}]]]}, {k, 50} ], PlotStyle -> Green], ListLinePlot[Table[ {k, ByteCount[ Developer`FromPackedArray[Table[RandomInteger[], {i, k}]]]}, {k, 50} ], PlotStyle -> Red] ] hth, albert