static int total_i(void *vstart, void *vend, size_t stride, void *ptr) { VALUE v; struct total_data *data = (struct total_data *)ptr; for (v = (VALUE)vstart; v != (VALUE)vend; v += stride) { if (RBASIC(v)->flags) { switch (BUILTIN_TYPE(v)) { case T_NONE: case T_ICLASS: case T_NODE: case T_ZOMBIE: continue; case T_CLASS: if (FL_TEST(v, FL_SINGLETON)) continue; default: if (data->klass == 0 || rb_obj_is_kind_of(v, data->klass)) { data->total += memsize_of(v); } } } } return 0; }
static int cos_i(void *vstart, void *vend, size_t stride, void *data) { size_t *counts = (size_t *)data; VALUE v = (VALUE)vstart; for (;v != (VALUE)vend; v += stride) { if (RBASIC(v)->flags) { counts[BUILTIN_TYPE(v)] += memsize_of(v); } } return 0; }
static int total_i(void *vstart, void *vend, size_t stride, void *ptr) { VALUE v; struct total_data *data = (struct total_data *)ptr; for (v = (VALUE)vstart; v != (VALUE)vend; v += stride) { if (RBASIC(v)->flags) { if (data->klass == 0 || rb_obj_is_kind_of(v, data->klass)) { data->total += memsize_of(v); } } } return 0; }
static VALUE memsize_of_m(VALUE self, VALUE obj) { return SIZET2NUM(memsize_of(obj)); }
static size_t iow_size(const void *ptr) { VALUE obj = (VALUE)ptr; return memsize_of(obj); }