Sorry for interruption.

>I updated the patch to support environments sizeof(RVALUE)
>is not multiples of 5, such as windows.
>(pointed by kosako: http://d.hatena.ne.jp/kkos/20060228#1141128641)

On VisualC++, this patch changes sizeof(RVALUE) to 20.

Index: gc.c
===================================================================
RCS file: /src/ruby/gc.c,v
retrieving revision 1.233
diff -u -w -b -p -r1.233 gc.c
--- gc.c	13 Feb 2006 04:53:21 -0000	1.233
+++ gc.c	2 Mar 2006 04:12:31 -0000
@@ -310,6 +310,8 @@ rb_global_variable(VALUE *var)
     rb_gc_register_address(var);
 }
 
+#pragma pack(push, 1)
+
 typedef struct RVALUE {
     union {
 	struct {
@@ -339,6 +341,8 @@ typedef struct RVALUE {
 #endif
 } RVALUE;
 
+#pragma pack(pop)
+
 static RVALUE *freelist = 0;
 static RVALUE *deferred_final_list = 0;
 

//////////

Probably even this works on VisualC++, still
should not depend on 20byte alignment though. Just for tips. :-)