> > But, you still wouldn't have to store the class info for > each > > element. I'm not sure of the underlying Ruby object data > > structure, but at a minimum, it should get rid of a pointer > (to > > the class) per element. I think you'd have to implement > this > > in C to do it right. > > I don't think it's worth the effort. That must be a very > special case where > you need huge collections of inhomogenous data where you want > to squeeze out > every byte. I can't think of an application of this. Plus, > it'll be error > prone and very inefficient. I just did some memory measurements to see how much various things take up. I tested a million objects using this: ruby -e 'mem0 = `ps -p #{Process.pid} -o rsz`. split("\n")[1].to_i; a=Array.new(2**20);a.each_index{|i| a[i]=<object> };mem1 = `ps -p #{Process.pid} -o rsz`. split("\n")[1].to_i; puts(((mem1-mem0)/1024.0).to_s+"MB")' Here are some results (object ref + object): bytes object ----- ------ 4 nil,false,true,Fixnum 30 String 0-1 characters 46 String 2-11 characters 54 String 12-19 characters (+8 bytes per +8 characters) 30 Float 30 Array 0 nil entries 46 Array 1-3 nil entries 54 Array 4-5 nil entries (+8 bytes per +2 entries) 102 Hash empty 126 Hash 1 Fixnum=>nil entry (+24 bytes per +1 entry) These overheads look pretty large to me. That 30 byte overhead (includes 4-byte object ref) is quite dominate for many cases. In C, the overhead would be 12 bytes for strings and arrays (pointer, length, malloc entry). An array of strings/arrays where each had a fixed length could be implemented with an overhead of 4 bytes (an index into a concatenated string/array). An array of fixed length strings/arrays could be implemented with no overhead per entry. Maybe it is worth it to handle these last 2 cases (could be done in Ruby easily), but not the completely variable length case (would probably need C). __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com