MCPcopy Create free account
hub / github.com/WheretIB/nullc / CollectMemory

Method CollectMemory

NULLC/StdLib.cpp:431–501  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

429}
430
431void NULLC::CollectMemory()
432{
433// printf("%d used memory (%d collectable cap, %d max cap)\r\n", usedMemory, collectableMinimum, globalMemoryLimit);
434
435 double time = (double(clock()) / CLOCKS_PER_SEC);
436
437 // All memory blocks are marked with 0
438 MarkMemory(0);
439 // Used memory blocks are marked with 1
440 MarkUsedBlocks();
441
442 markTime += (double(clock()) / CLOCKS_PER_SEC) - time;
443 time = (double(clock()) / CLOCKS_PER_SEC);
444
445 // Globally allocated objects marked with 0 are deleted
446 unsigned int unusedBlocks = 0;
447 for(unsigned int i = 0; i < globalObjects.size(); i++)
448 {
449 markerType &marker = *(markerType*)((char*)globalObjects[i] + 4);
450 if(!(marker & NULLC::OBJECT_VISIBLE))
451 {
452 if((marker & NULLC::OBJECT_FINALIZABLE) && !(marker & NULLC::OBJECT_FINALIZED))
453 {
454 NULLC::FinalizeObject(marker, (char*)globalObjects[i] + 4);
455 }else{
456 usedMemory -= *(unsigned int*)globalObjects[i];
457 NULLC::dealloc(globalObjects[i]);
458 globalObjects[i] = globalObjects.back();
459 globalObjects.pop_back();
460 unusedBlocks++;
461 i--;
462 }
463 }
464 }
465// printf("%d unused globally allocated blocks destroyed (%d remains)\r\n", unusedBlocks, globalObjects.size());
466
467// printf("%d used memory\r\n", usedMemory);
468
469 // Objects allocated from pools are freed
470 unusedBlocks = pool8.FreeMarked();
471 usedMemory -= unusedBlocks * 8;
472// printf("%d unused pool blocks freed (8 bytes)\r\n", unusedBlocks);
473 unusedBlocks = pool16.FreeMarked();
474 usedMemory -= unusedBlocks * 16;
475// printf("%d unused pool blocks freed (16 bytes)\r\n", unusedBlocks);
476 unusedBlocks = pool32.FreeMarked();
477 usedMemory -= unusedBlocks * 32;
478// printf("%d unused pool blocks freed (32 bytes)\r\n", unusedBlocks);
479 unusedBlocks = pool64.FreeMarked();
480 usedMemory -= unusedBlocks * 64;
481// printf("%d unused pool blocks freed (64 bytes)\r\n", unusedBlocks);
482 unusedBlocks = pool128.FreeMarked();
483 usedMemory -= unusedBlocks * 128;
484// printf("%d unused pool blocks freed (128 bytes)\r\n", unusedBlocks);
485 unusedBlocks = pool256.FreeMarked();
486 usedMemory -= unusedBlocks * 256;
487// printf("%d unused pool blocks freed (256 bytes)\r\n", unusedBlocks);
488 unusedBlocks = pool512.FreeMarked();

Callers 3

TestSpeed.cppFile · 0.45
TestGC.cppFile · 0.45
barFunction · 0.45

Calls 8

FinalizeObjectFunction · 0.85
nullcRunFunctionFunction · 0.85
MarkUsedBlocksFunction · 0.70
clockFunction · 0.50
sizeMethod · 0.45
pop_backMethod · 0.45
FreeMarkedMethod · 0.45
clearMethod · 0.45

Tested by 1

barFunction · 0.36