Ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e0ba6b95ab71a441357ed5484e33498)
Data Fields
RString Struct Reference

Ruby's String. More...

#include <rstring.h>

Data Fields

struct RBasic basic
 Basic part, including flags and class. More...
 
union {
   struct {
      long   len
 
      char *   ptr
 
      union {
         long   capa
 
         VALUE   shared
 
      }   aux
 
   }   heap
 
   struct {
      char   ary [RSTRING_EMBED_LEN_MAX+1]
 
   }   embed
 
as
 
union {
   struct {
      long   len
 Length of the string, not including terminating NUL character. More...
 
      char *   ptr
 Pointer to the contents of the string. More...
 
      union {
         long   capa
 Capacity of *ptr. More...
 
         VALUE   shared
 Parent of the string. More...
 
      }   aux
 Auxiliary info. More...
 
   }   heap
 Strings that use separated memory region for contents use this pattern. More...
 
   struct {
      char   ary [RSTRING_EMBED_LEN_MAX+1]
 When a string is short enough, it uses this area to store the contents themselves. More...
 
   }   embed
 Embedded contents. More...
 
as
 String's specific fields. More...
 

Detailed Description

Ruby's String.

A string in ruby conceptually has these information:

It is worth noting that a string is not an array of characters in ruby. It has never been. In 1.x a string was an array of integers. Since 2.x a string is no longer an array of anything. A string is a string – just like a Time is not an integer.

Definition at line 3157 of file rb_mjit_min_header-3.1.3.h.

Field Documentation

◆ ary

char RString::ary[RSTRING_EMBED_LEN_MAX+1]

When a string is short enough, it uses this area to store the contents themselves.

This was impractical in the 20th century, but these days 64 bit machines can typically hold 24 bytes here. Could be sufficiently large. In this case the length is encoded into the flags.

Definition at line 3169 of file rb_mjit_min_header-3.1.3.h.

Referenced by rb_sym_all_symbols().

◆ 

union { ... } RString::as

String's specific fields.

◆ 

union { ... } RString::aux

Auxiliary info.

◆ basic

struct RBasic RString::basic

Basic part, including flags and class.

Definition at line 3158 of file rb_mjit_min_header-3.1.3.h.

◆ capa

long RString::capa

Capacity of *ptr.

A continuous memory region of at least capa bytes is expected to exist at *ptr. This can be bigger than len.

Definition at line 3164 of file rb_mjit_min_header-3.1.3.h.

Referenced by rb_str_buf_new(), and rb_str_set_len().

◆ 

struct { ... } RString::embed

Embedded contents.

◆ 

struct { ... } RString::heap

Strings that use separated memory region for contents use this pattern.

◆ len

long RString::len

◆ ptr

char* RString::ptr

◆ shared

VALUE RString::shared

Parent of the string.

Nowadays strings can share their contents each other, constructing gigantic nest of objects. This situation is called "shared", and this is the field to control such properties.

Definition at line 3165 of file rb_mjit_min_header-3.1.3.h.


The documentation for this struct was generated from the following files: