marshal.c: embed load and dump argument objects
This avoid a bit of needless malloc churn.
This commit is contained in:
parent
05028f4d55
commit
5278742bf0
22
marshal.c
22
marshal.c
@ -228,19 +228,24 @@ static void
|
|||||||
free_dump_arg(void *ptr)
|
free_dump_arg(void *ptr)
|
||||||
{
|
{
|
||||||
clear_dump_arg(ptr);
|
clear_dump_arg(ptr);
|
||||||
xfree(ptr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static size_t
|
static size_t
|
||||||
memsize_dump_arg(const void *ptr)
|
memsize_dump_arg(const void *ptr)
|
||||||
{
|
{
|
||||||
return sizeof(struct dump_arg);
|
const struct dump_arg *p = (struct dump_arg *)ptr;
|
||||||
|
size_t memsize = 0;
|
||||||
|
if (p->symbols) memsize += rb_st_memsize(p->symbols);
|
||||||
|
if (p->data) memsize += rb_st_memsize(p->data);
|
||||||
|
if (p->compat_tbl) memsize += rb_st_memsize(p->compat_tbl);
|
||||||
|
if (p->encodings) memsize += rb_st_memsize(p->encodings);
|
||||||
|
return memsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const rb_data_type_t dump_arg_data = {
|
static const rb_data_type_t dump_arg_data = {
|
||||||
"dump_arg",
|
"dump_arg",
|
||||||
{mark_dump_arg, free_dump_arg, memsize_dump_arg,},
|
{mark_dump_arg, free_dump_arg, memsize_dump_arg,},
|
||||||
0, 0, RUBY_TYPED_FREE_IMMEDIATELY
|
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE
|
||||||
};
|
};
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
@ -1272,19 +1277,24 @@ static void
|
|||||||
free_load_arg(void *ptr)
|
free_load_arg(void *ptr)
|
||||||
{
|
{
|
||||||
clear_load_arg(ptr);
|
clear_load_arg(ptr);
|
||||||
xfree(ptr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static size_t
|
static size_t
|
||||||
memsize_load_arg(const void *ptr)
|
memsize_load_arg(const void *ptr)
|
||||||
{
|
{
|
||||||
return sizeof(struct load_arg);
|
const struct load_arg *p = (struct load_arg *)ptr;
|
||||||
|
size_t memsize = 0;
|
||||||
|
if (p->symbols) memsize += rb_st_memsize(p->symbols);
|
||||||
|
if (p->data) memsize += rb_st_memsize(p->data);
|
||||||
|
if (p->partial_objects) memsize += rb_st_memsize(p->partial_objects);
|
||||||
|
if (p->compat_tbl) memsize += rb_st_memsize(p->compat_tbl);
|
||||||
|
return memsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const rb_data_type_t load_arg_data = {
|
static const rb_data_type_t load_arg_data = {
|
||||||
"load_arg",
|
"load_arg",
|
||||||
{mark_load_arg, free_load_arg, memsize_load_arg,},
|
{mark_load_arg, free_load_arg, memsize_load_arg,},
|
||||||
0, 0, RUBY_TYPED_FREE_IMMEDIATELY
|
0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE
|
||||||
};
|
};
|
||||||
|
|
||||||
#define r_entry(v, arg) r_entry0((v), (arg)->data->num_entries, (arg))
|
#define r_entry(v, arg) r_entry0((v), (arg)->data->num_entries, (arg))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user