電子メール、ネットワーク機器集中管理、異常検知、分散処理、クラウド基盤などのシステム開発に従事。古代Rubyist。 先日、 Ruby (CRuby) が String をメモリ上でどのように扱っているのか気になって調べていました。そこで String の構造体やメモリの扱いとその変遷が興味深いと思ったので、ちょっとまとめてみました。 Ruby のオブジェクトのデータ構造 まず前提知識として、そもそも Ruby が C の世界でオブジェクトをどのようなデータ構造で持っているかをざっくりおさらいします。 VALUE 型 Ruby の内部ではオブジェクトを VALUE 型という型の変数で取り扱っています。 // include/ruby/internal/value.h typedef unsigned long VALUE; 宣言の通り VALUE 型の実体は unsigned long で
![Ruby は String をメモリ上でどのように扱っているのか? | IIJ Engineers Blog](https://cdn-ak-scissors.b.st-hatena.com/image/square/ecbf16f9d38656ae591b12b7d6ba6945a6746e4c/height=288;version=1;width=512/https%3A%2F%2Feng-blog.iij.ad.jp%2Fwp-content%2Fuploads%2F2024%2F07%2Fa11b4bb3ba448d1fa402ac3dc62cc91f-3.png)