(import (chicken gc) (chicken blob)) (let ([l '()] [stats (memory-statistics)]) (define (alloc bytes) (gc #t) (print "alloc " bytes " expected used: " (+ (vector-ref (memory-statistics) 1) bytes)) (set! l (cons (make-blob bytes) l))) (let lp ([i 0]) (when (< i 50) (let ([bytes (inexact->exact (floor (/ (vector-ref (memory-statistics) 1) 20)))] [cur-used (vector-ref (memory-statistics) 1)]) (alloc bytes) (let ([new-used (vector-ref (memory-statistics) 1)]) (print "diff: " (- new-used (+ cur-used bytes))))) (let ([new (memory-statistics)]) (print "used / heap: " (vector-ref new 1) " / " (vector-ref new 0) (if (= (vector-ref stats 0) (vector-ref new 0)) "" " <- heap grew")) (set! stats new)) (lp (add1 i))))) ;; $ ./gctest ;; alloc 51635 expected used: 1084355 ;; diff: 37 ;; used / heap: 1084304 / 1572864 ;; alloc 54219 expected used: 1138611 ;; diff: 37 ;; used / heap: 1138560 / 1572864 ;; alloc 56932 expected used: 1195580 ;; diff: 36 ;; used / heap: 1195528 / 1572864 ;; alloc 59780 expected used: 1255396 ;; diff: 36 ;; used / heap: 1255344 / 1572864 ;; alloc 62771 expected used: 1318203 ;; diff: 37 ;; used / heap: 1318152 / 1572864 ;; alloc 65911 expected used: 1384151 ;; diff: 33 ;; used / heap: 1384096 / 1572864 ;; alloc 69208 expected used: 1453392 ;; diff: 32 ;; used / heap: 1453336 / 1572864 ;; alloc 72670 expected used: 1526094 ;; diff: 34 ;; used / heap: 1526040 / 1572864 ;; alloc 76306 expected used: 1602434 ;; diff: 1048614 ;; used / heap: 2650960 / 3670016 <- heap grew ;; alloc 132552 expected used: 2783600 ;; diff: 32 ;; used / heap: 2783544 / 3670016 ;; alloc 139181 expected used: 2922813 ;; diff: 35 ;; used / heap: 2922760 / 3670016 ;; alloc 146142 expected used: 3068990 ;; diff: 34 ;; used / heap: 3068936 / 3670016 ;; alloc 153450 expected used: 3222474 ;; diff: 38 ;; used / heap: 3222424 / 3670016 ;; alloc 161125 expected used: 3383637 ;; diff: 35 ;; used / heap: 3383584 / 3670016 ;; alloc 169183 expected used: 3552855 ;; diff: 33 ;; used / heap: 3552800 / 3670016 ;; alloc 177644 expected used: 3730532 ;; diff: 1835044 ;; used / heap: 5565488 / 7340032 <- heap grew ;; alloc 278278 expected used: 5843854 ;; diff: 34 ;; used / heap: 5843800 / 7340032 ;; alloc 292194 expected used: 6136082 ;; diff: 38 ;; used / heap: 6136032 / 7340032 ;; alloc 306805 expected used: 6442925 ;; diff: 35 ;; used / heap: 6442872 / 7340032 ;; alloc 322147 expected used: 6765107 ;; diff: 37 ;; used / heap: 6765056 / 7340032 ;; alloc 338256 expected used: 7103400 ;; diff: 32 ;; used / heap: 7103344 / 7340032 ;; alloc 355171 expected used: 7458603 ;; diff: 3670053 ;; used / heap: 11128568 / 14680064 <- heap grew ;; alloc 556432 expected used: 11685088 ;; diff: 32 ;; used / heap: 11685032 / 14680064 ;; alloc 584255 expected used: 12269375 ;; diff: 33 ;; used / heap: 12269320 / 14680064 ;; alloc 613470 expected used: 12882878 ;; diff: 34 ;; used / heap: 12882824 / 14680064 ;; alloc 644145 expected used: 13527057 ;; diff: 39 ;; used / heap: 13527008 / 14680064 ;; alloc 676354 expected used: 14203450 ;; diff: 38 ;; used / heap: 14203400 / 14680064 ;; alloc 710174 expected used: 14913662 ;; diff: 7340066 ;; used / heap: 22253640 / 29360128 <- heap grew ;; alloc 1112686 expected used: 23366414 ;; diff: 34 ;; used / heap: 23366360 / 29360128 ;; alloc 1168322 expected used: 24534770 ;; diff: 38 ;; used / heap: 24534720 / 29360128 ;; alloc 1226740 expected used: 25761548 ;; diff: 36 ;; used / heap: 25761496 / 29360128 ;; alloc 1288078 expected used: 27049662 ;; diff: 34 ;; used / heap: 27049608 / 29360128 ;; alloc 1352484 expected used: 28402180 ;; diff: 15356350 ;; used / heap: 43758442 / 60072756 <- heap grew ;; alloc 2187926 expected used: 45946456 ;; diff: 34 ;; used / heap: 45946402 / 60072756 ;; alloc 2297324 expected used: 48243814 ;; diff: 36 ;; used / heap: 48243762 / 60072756 ;; alloc 2412192 expected used: 50656042 ;; diff: 32 ;; used / heap: 50655986 / 60072756 ;; alloc 2532803 expected used: 53188877 ;; diff: 37 ;; used / heap: 53188826 / 60072756 ;; alloc 2659445 expected used: 55848359 ;; diff: 35 ;; used / heap: 55848306 / 60072756 ;; alloc 2792419 expected used: 58640813 ;; diff: 37 ;; used / heap: 58640762 / 60072756 ;; alloc 2932042 expected used: 61572892 ;; diff: 31502445 ;; used / heap: 93075249 / 123077570 <- heap grew ;; alloc 4653766 expected used: 97729103 ;; diff: 34 ;; used / heap: 97729049 / 123077570 ;; alloc 4886456 expected used: 102615593 ;; diff: 32 ;; used / heap: 102615537 / 123077570 ;; alloc 5130780 expected used: 107746405 ;; diff: 36 ;; used / heap: 107746353 / 123077570 ;; alloc 5387321 expected used: 113133762 ;; diff: 39 ;; used / heap: 113133713 / 123077570 ;; alloc 5656689 expected used: 118790490 ;; diff: 39 ;; used / heap: 118790441 / 123077570 ;; alloc 5939526 expected used: 124730055 ;; diff: 64508590 ;; used / heap: 189238557 / 252094682 <- heap grew ;; alloc 9461931 expected used: 198700576 ;; diff: 37 ;; used / heap: 198700525 / 252094682 ;; alloc 9935030 expected used: 208635643 ;; diff: 34 ;; used / heap: 208635589 / 252094682 ;; alloc 10431783 expected used: 219067460 ;; diff: 33 ;; used / heap: 219067405 / 252094682 ;; alloc 10953374 expected used: 230020867 ;; diff: 34 ;; used / heap: 230020813 / 252094682