MCPcopy Create free account
hub / github.com/codenameone/CodenameOne / _memory_adjust_size_class

Function _memory_adjust_size_class

vm/ByteCodeTranslator/src/rpmalloc.c:1258–1288  ·  view source on GitHub ↗

Adjust and optimize the size class properties for the given class

Source from the content-addressed store, hash-verified

1256
1257//! Adjust and optimize the size class properties for the given class
1258static void
1259_memory_adjust_size_class(size_t iclass) {
1260 //Calculate how many pages are needed for 255 blocks
1261 size_t block_size = _memory_size_class[iclass].size;
1262 size_t page_count = (block_size * 255) / PAGE_SIZE;
1263 //Cap to 16 pages (64KiB span granularity)
1264 page_count = (page_count == 0) ? 1 : ((page_count > 16) ? 16 : page_count);
1265 //Merge page counts to span size class granularity
1266 page_count = ((page_count + (SPAN_CLASS_GRANULARITY - 1)) / SPAN_CLASS_GRANULARITY) * SPAN_CLASS_GRANULARITY;
1267 if (page_count > 16)
1268 page_count = 16;
1269 size_t block_count = ((page_count * PAGE_SIZE) - SPAN_HEADER_SIZE) / block_size;
1270 //Store the final configuration
1271 _memory_size_class[iclass].page_count = (uint16_t)page_count;
1272 _memory_size_class[iclass].block_count = (uint16_t)block_count;
1273 _memory_size_class[iclass].class_idx = (uint16_t)iclass;
1274
1275 //Check if previous size classes can be merged
1276 size_t prevclass = iclass;
1277 while (prevclass > 0) {
1278 --prevclass;
1279 //A class can be merged if number of pages and number of blocks are equal
1280 if ((_memory_size_class[prevclass].page_count == _memory_size_class[iclass].page_count) &&
1281 (_memory_size_class[prevclass].block_count == _memory_size_class[iclass].block_count)) {
1282 memcpy(_memory_size_class + prevclass, _memory_size_class + iclass, sizeof(_memory_size_class[iclass]));
1283 }
1284 else {
1285 break;
1286 }
1287 }
1288}
1289
1290#if defined( _WIN32 ) || defined( __WIN32__ ) || defined( _WIN64 )
1291# include <windows.h>

Callers 1

rpmalloc_initializeFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected