• ベストアンサー

rubyのメモリ

rubyではすべてをオブジェクトとして扱っているのですが、やはりこのやり方だとメモリをたくさん食ってしまうのでしょうか?例えばCならintで整数は4バイト(?)ぐらいで表せますがrubyの場合オブジェクトになるのでもっとメモリを食うことになってしまうのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4851/10265)
回答No.1

全てがオブジェクトというのは実は正確でなくて、論理的にはそう思っていいのですが、実は Fixnum と Symbol は内部では他の言語と同じように扱われています。つまりFixnumは普通4バイトです。もちろんプログラマは「全てがオブジェクト」と思ってコーディングしてかまいません。 一般的には、 非オブジェクト指向でカリカリ書かれたPerl>>Ruby>オブジェクト指向で書かれたPerl の順に速い&省メモリだと思います。

mamoko7
質問者

お礼

よくわかりました。どうもありがとうございます。

関連するQ&A

  • rubyにおける変数と代入のメモリの様子について

    Rubyの変数と代入演算は、メモリについてどのような扱いになっているのでしょうか。2点ほど疑問電があります。 1点目:代入演算は変数にアドレスを渡しているのか RubyLifeのRuby入門のサンプルをみて学習していたところ疑問がわきました。 http://www.rubylife.jp/ini/var/index4.html を参照しながら示します。 str1 = "Tokyo" str2 = str1 str1 << ",Japan" とやるとstr1もstr2も"Tokyo,Japan"となることから、rubyでの代入演算はアドレスを代入してると考えました。 2点目:新しくオブジェクトを代入すると別メモリ領域において、そのアドレスを代入しているのか str1 = "Tokyo" str2 = str1 str1 = "Osaka" とやると、str1は"Osaka"、str2は"Tokyo"となります。 前述の参照渡と考えるとstr2も"Osaka"となっているはずですが違いました。 ここで解説に(引用はじめ) なお2つの変数が同じオブジェクトを指し示した後で、どちらかのオブジェクトに新しいオブジェクトを 代入した場合は、代入された変数が指し示すオブジェクトだけが変更されるだけです。(引用おわり) とあります。 このことをふまえると、新しいオブジェクトを変数に代入するというのは、別のメモリ領域をつくってデータを置いてから、そのアドレスを変数に代入している、と考えました。 これら2つの考えと実際の仕組みは一致しているのでしょうか、と言うのが質問です。 質問点をまとめると、Rubyにおいて変数に対して ・代入演算はアドレスを代入しているのか(Cでいうポインタの扱いなのか) ・新しいオブジェクトを代入するときには、新メモリ領域を作ってデータを入れてそのアドレスを代入しているのか という点です。 ついこの間はじめたばかりの初心者ですが、どうかご教授よろしくお願いいたします。

    • ベストアンサー
    • Ruby
  • Rubyのプログラミングをする環境をUSBメモリ上に整えることはできる

    Rubyのプログラミングをする環境をUSBメモリ上に整えることはできるでしょうか。 高校の課題研究でRubyでのゲーム制作をしようと思っているのですが、 学校のパソコンにActiveScriptRubyを入れられるか分からないので、 USBメモリにインストールしたいのですが、 初めてActiveScriptRubyをパソコンにインストールしたとき、 正常に動作せず、調べてみるとVistaの場合はCドライブ直下にインストールするとのことでした。 なのでただUSBメモリに入れた場合正しく動作しないと思うのですが、 どうすればいいでしょうか。 教材として「Rubyではじめるゲームプログラミング」という本を使いたいので、 ActiveScriptRuby、MyGame、Ruby/SDLというのをインストールしなければいけないみたいです。 Rubyどころかプログラミングすらまともにできない初心者なので、 もしかしたら上の質問でおかしいところがあるかもしれませんが、 教えていただけると助かります。 家と学校のパソコンはどちらもWindowsVistaです。 USBメモリは4GBです。 できれば学校のパソコンにはなにも入れないようにしたいと思っています。 また、上の条件では無理がある場合は代用品などで補うことができれば、 それでも大丈夫だと思います。 最終目標としてはゲームが作れればいいと思っています。

    • ベストアンサー
    • Ruby
  • オブジェクト生成によるメモリ確保

    int b; とやるとメモリ上で4バイト、つまりメモリセルが32個が確保されます。 それでは class A というものがあって、 A a=new A(); とオブジェクトを作るとメモリ上には何バイト確保されるのでしょうか?

    • ベストアンサー
    • Java
  • Rubyってどうよ!?

    Rubyってかなり良さそう(一通り文法を見た限りでは、少なくとも 対象領域 がもろかぶる Perl よりはかなり良さそう)だけど、実際どんなもん? もちろん、現行サポート体制がままなっていないけれど、オライリーからも「動物本」が出ているし、今後PHPと平行して、サポートするところが増えてきそう。 (なんといってもマニュアルが全て日本語から先行して出て行くところが、われわれが他の言語で背負いつづけている一種の「ハンデ」が逆転するわけでおもしろい。) で、Ruby関連の掲示板にとうこうすると、感情的な意見ばかりくるだろうから、ここに投稿したわけなのですが、冷静に見て、将来Rubyはどんなものですかね。 (私の見る限り、「真のオブジェクト指向」「真のスクリプト指向」を実現している唯一の言語だと思うのですけど、文字列系記述はPerlと同等に強力で、オブジェクト指向にいたっては他の言語の追随をゆるさず、スクリプト的柔軟さでも、Perlをも軽く凌駕していると思いました。あくまで文法を一通りみての感想ですが。。。) なお、Ruby関連サイトは大体見て回ったので、サイト紹介はいらんです。

  • オブジェクトのメモリイメージについて

    こんにちは!基本的なことなのかもしれませんが、 質問させてください。 C言語でたとえば下記のような構造体 struct { long a; short b; char c; }; を作ると、メモリイメージは ------------------- a用の4バイトの領域 b用の2バイトの領域 c用の1バイトの領域 ------------------- となると思うのですが、 (構造体アラインメントが1バイトの場合) C++でたとえば下記のようなクラス class { public: int test(int x); long a; short b; char c; }; を作った場合、メモリイメージとしてはどのように なるのでしょうか? (というか、クラスのインスタンスの中で メンバ関数はどうやって保持され、どうやって呼び出されるのでしょうか?) どなたか、教えてください。

  • C言語の変数の型がわかりません

    C言語の変数の型がわかりません [int]は4バイトを使って整数(-2147483648~2147483648)を格納できる. [long int]は4バイトを使って整数(-2147483648~2147483648)を格納できる. のようなことが書いてあります. [int]と[long int]の違いは何ですか?

  • Rubyの.soについて

    Rubyの.soについて 拡張子が.soファイルがあるのですが、これはなんなのでしょうか。 また、Rubyのファイルは基本テキスト形式ですが、C++のプログラムで扱う場合、配布する際には、バイナリ形式にすると思うのですが、それはどうすればいいのでしょうか。(間違ってたらすいません) さらに、Ruby関係でおすすめの本がありましたら、教えて頂けると幸いです。ちなみにC++はある程度できます。 長文失礼しました。

    • ベストアンサー
    • Ruby
  • C/C++言語のメモリについて

    C言語でメモリを2種類?に分けると、スタックとヒープがあります。 ヒープは mallocなどで確保し、freeで解放しますがスタックは解放する必要がありません。 そのスタックは通常、何バイトまで可能なのでしょうか? あと関数外のファイルの先頭に int[1000000];とした場合、このメモリはmallocで確保していませんが、 どこに作られるのでしょうか? 私のパソコンはメモリが2GBでWindows2000ですが、CやC++で最大、何バイトまでメモリが使えますか? また、一番多くメモリを確保できるなら、OSはなんでも構いません。 解釈等も間違っていたらご指摘していただきたいです。

  • プログラミング言語 rubyを用いて、

    プログラミング言語 rubyを用いて、 画像処理プログラミングを書こうとしていますが、以下の点が分かりません。 1・メモリの動的確保はどうするの?(C言語でいうmalloc) 2・ファイルから配列に展開するにはどうしたらいいの? 以上が分かればわかるきがするのですが・・ 当方 C言語での画像処理プログラミングはそれなりに経験があるのですが rubyで実現できるのかわからなくて・・

    • ベストアンサー
    • Ruby
  • rubyのObject#methodsについて

    こんにちは、 rubyのmethodsメソッドについてです。 met = Object.method(:method) として、ObjectクラスのmethodメソッドをMethodインスタンスとしたとき met.parametes #=> [[:ref]] とすると、引数の情報を得ることができます。 しかし、 met.methods には、「:parameters」がありません。 クラスごとのメソッドを全て表示させたいのですが、 methodsはすべてのメンバを取り出すメソッドではないのでしょうか。 ご存知の方がいらっしゃいましたらお教えくださいませ。 ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-linux] Rails 3.1.4 gem 1.8.17 CentOS 5.7

    • ベストアンサー
    • Ruby