Adjust and optimize the size class properties for the given class
| 2733 | |
| 2734 | //! Adjust and optimize the size class properties for the given class |
| 2735 | static void |
| 2736 | _rpmalloc_adjust_size_class(size_t iclass) { |
| 2737 | size_t block_size = _memory_size_class[iclass].block_size; |
| 2738 | size_t block_count = (_memory_span_size - SPAN_HEADER_SIZE) / block_size; |
| 2739 | |
| 2740 | _memory_size_class[iclass].block_count = (uint16_t)block_count; |
| 2741 | _memory_size_class[iclass].class_idx = (uint16_t)iclass; |
| 2742 | |
| 2743 | //Check if previous size classes can be merged |
| 2744 | if (iclass >= SMALL_CLASS_COUNT) { |
| 2745 | size_t prevclass = iclass; |
| 2746 | while (prevclass > 0) { |
| 2747 | --prevclass; |
| 2748 | //A class can be merged if number of pages and number of blocks are equal |
| 2749 | if (_memory_size_class[prevclass].block_count == _memory_size_class[iclass].block_count) |
| 2750 | _rpmalloc_memcpy_const(_memory_size_class + prevclass, _memory_size_class + iclass, sizeof(_memory_size_class[iclass])); |
| 2751 | else |
| 2752 | break; |
| 2753 | } |
| 2754 | } |
| 2755 | } |
| 2756 | |
| 2757 | //! Initialize the allocator and setup global data |
| 2758 | extern inline int |
no outgoing calls
no test coverage detected