Ruby 初心者スレッド Part 27at TECH
Ruby 初心者スレッド Part 27 - 暇つぶし2ch422:デフォルトの名無しさん
09/04/15 01:24:15
以前からArrayはcopy on writeに違いないと訳もなく信じていたのだけど、
今回の話でちょっと興味を持ったので少し実験してみた。
もしかして一部分でも書き換えたら、巨大な配列だろうと丸コピーしてる?

irb(main):001:0> a = Array.new(1<<24) { |i| i } # メモリ使用量70MB程度
irb(main):002:0> b = Array.new(1<<8) { a[1..-1] } # メモリ使用量そのまま
irb(main):003:0> b.each { |e| e[0] = 1 } # たった256要素も変更できない
NoMemoryError: failed to allocate memory
from (irb):3:in `[]='
from (irb):3
from (irb):3:in `each'
from (irb):3
from :0

ソースを読むだけの気力も能力もないので適当なことを言わせてもらうけど
配列をブロックに小分けするようなことはしていないようにみえる。

ガチガチの配列ならともかく、RubyのArrayってどこにでも追加削除可能な
万能コンテナみたいだから、内部的にはある程度の長さのブロック(配列)と
ハッシュやツリーなんかの混合構造の方が効率良さそうに思えるけど。
それとも、やり過ぎて添字アクセスが遅くなるのを嫌っているのかな?


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch