Commit a76da325 authored by dearblue's avatar dearblue

Use stack memory for small name of Struct members

parent c53b7ced
...@@ -123,18 +123,29 @@ mrb_struct_ref(mrb_state *mrb, mrb_value obj) ...@@ -123,18 +123,29 @@ mrb_struct_ref(mrb_state *mrb, mrb_value obj)
static mrb_sym static mrb_sym
mrb_id_attrset(mrb_state *mrb, mrb_sym id) mrb_id_attrset(mrb_state *mrb, mrb_sym id)
{ {
#define STACKED_ALLOC_MAX 32
#define STACKED_STRING_MAX (STACKED_ALLOC_MAX - 1) /* '=' character */
const char *name; const char *name;
char *buf; char *buf;
mrb_int len; mrb_int len;
mrb_sym mid; mrb_sym mid;
char stacked[STACKED_ALLOC_MAX];
name = mrb_sym2name_len(mrb, id, &len); name = mrb_sym2name_len(mrb, id, &len);
buf = (char *)mrb_malloc(mrb, (size_t)len+1); if (len > STACKED_STRING_MAX) {
buf = (char *)mrb_malloc(mrb, (size_t)len+1);
}
else {
buf = stacked;
}
memcpy(buf, name, (size_t)len); memcpy(buf, name, (size_t)len);
buf[len] = '='; buf[len] = '=';
mid = mrb_intern(mrb, buf, len+1); mid = mrb_intern(mrb, buf, len+1);
mrb_free(mrb, buf); if (buf != stacked) {
mrb_free(mrb, buf);
}
return mid; return mid;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment