summaryrefslogtreecommitdiff
path: root/gc/default/default.c
diff options
context:
space:
mode:
Diffstat (limited to 'gc/default/default.c')
-rw-r--r--gc/default/default.c24
1 files changed, 5 insertions, 19 deletions
diff --git a/gc/default/default.c b/gc/default/default.c
index 4d4bd1af25..b39a1bd855 100644
--- a/gc/default/default.c
+++ b/gc/default/default.c
@@ -2610,24 +2610,9 @@ heap_idx_for_size(size_t size)
}
size_t
-rb_gc_impl_heap_id_for_size(void *objspace_ptr, size_t size)
+rb_gc_impl_size_slot_size(void *objspace_ptr, size_t size)
{
- return heap_idx_for_size(size);
-}
-
-
-static size_t heap_sizes[HEAP_COUNT + 1] = { 0 };
-
-size_t *
-rb_gc_impl_heap_sizes(void *objspace_ptr)
-{
- if (heap_sizes[0] == 0) {
- for (unsigned char i = 0; i < HEAP_COUNT; i++) {
- heap_sizes[i] = heap_slot_size(i);
- }
- }
-
- return heap_sizes;
+ return heap_slot_size((unsigned char)heap_idx_for_size(size));
}
NOINLINE(static VALUE newobj_cache_miss(rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t heap_idx, bool vm_locked));
@@ -2740,7 +2725,7 @@ newobj_slowpath_wb_unprotected(VALUE klass, VALUE flags, rb_objspace_t *objspace
}
VALUE
-rb_gc_impl_new_obj(void *objspace_ptr, void *cache_ptr, VALUE klass, VALUE flags, bool wb_protected, size_t alloc_size)
+rb_gc_impl_new_obj(void *objspace_ptr, void *cache_ptr, VALUE klass, VALUE flags, bool wb_protected, size_t alloc_size, size_t *actual_alloc_size)
{
VALUE obj;
rb_objspace_t *objspace = objspace_ptr;
@@ -2755,6 +2740,7 @@ rb_gc_impl_new_obj(void *objspace_ptr, void *cache_ptr, VALUE klass, VALUE flags
}
size_t heap_idx = heap_idx_for_size(alloc_size);
+ *actual_alloc_size = heap_slot_size((unsigned char)heap_idx);
rb_ractor_newobj_cache_t *cache = (rb_ractor_newobj_cache_t *)cache_ptr;
@@ -7483,7 +7469,7 @@ gc_move(rb_objspace_t *objspace, VALUE src, VALUE dest, struct heap_page *src_pa
memcpy((void *)dest, (void *)src, MIN(src_slot_size, slot_size));
if (src_slot_size != slot_size && RB_TYPE_P(src, T_OBJECT)) {
- rb_gc_obj_changed_pool(dest, dest_page->heap - heaps);
+ rb_gc_obj_changed_slot_size(dest, slot_size - RVALUE_OVERHEAD);
}
if (RVALUE_OVERHEAD > 0) {