(import (chicken gc) (chicken blob)) (let ([l '()] [total-alloc 0] [stats (memory-statistics)]) (define (alloc bytes) (gc #t) (print "alloc " bytes " expected used: " (+ (vector-ref (memory-statistics) 1) bytes)) (set! total-alloc (+ bytes total-alloc)) (set! l (cons (make-blob bytes) l))) (let lp ([i 0]) (when (< (vector-ref stats 0) (* 1024 1024 1024)) (let ([bytes (inexact->exact (floor (/ (vector-ref (memory-statistics) 0) 40)))] [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) " total-alloc: " total-alloc (if (= (vector-ref stats 0) (vector-ref new 0)) "" " <- heap grew")) (set! stats new)) (lp (add1 i)))) (print "waiting for input") (read)) ;; $ csc gctest.scm && ./gctest ;; alloc 39321 expected used: 1072089 ;; diff: 39 ;; used / heap: 1072032 / 1572864 total-alloc: 39321 ;; alloc 39321 expected used: 1111449 ;; diff: 39 ;; used / heap: 1111392 / 1572864 total-alloc: 78642 ;; alloc 39321 expected used: 1150809 ;; diff: 39 ;; used / heap: 1150752 / 1572864 total-alloc: 117963 ;; alloc 39321 expected used: 1190169 ;; diff: 39 ;; used / heap: 1190112 / 1572864 total-alloc: 157284 ;; alloc 39321 expected used: 1229529 ;; diff: 39 ;; used / heap: 1229472 / 1572864 total-alloc: 196605 ;; alloc 39321 expected used: 1268889 ;; diff: 39 ;; used / heap: 1268832 / 1572864 total-alloc: 235926 ;; alloc 39321 expected used: 1308249 ;; diff: 39 ;; used / heap: 1308192 / 1572864 total-alloc: 275247 ;; alloc 39321 expected used: 1347609 ;; diff: 39 ;; used / heap: 1347552 / 1572864 total-alloc: 314568 ;; alloc 39321 expected used: 1386969 ;; diff: 39 ;; used / heap: 1386912 / 1572864 total-alloc: 353889 ;; alloc 39321 expected used: 1426329 ;; diff: 39 ;; used / heap: 1426272 / 1572864 total-alloc: 393210 ;; alloc 39321 expected used: 1465689 ;; diff: 39 ;; used / heap: 1465632 / 1572864 total-alloc: 432531 ;; alloc 39321 expected used: 1505049 ;; diff: 39 ;; used / heap: 1504992 / 1572864 total-alloc: 471852 ;; alloc 39321 expected used: 1544409 ;; diff: 39 ;; used / heap: 1544352 / 1572864 total-alloc: 511173 ;; alloc 39321 expected used: 1583769 ;; diff: 1048615 ;; used / heap: 2632288 / 3670016 total-alloc: 550494 <- heap grew ;; alloc 91750 expected used: 2724134 ;; diff: 34 ;; used / heap: 2724072 / 3670016 total-alloc: 642244 ;; alloc 91750 expected used: 2815918 ;; diff: 34 ;; used / heap: 2815856 / 3670016 total-alloc: 733994 ;; alloc 91750 expected used: 2907702 ;; diff: 34 ;; used / heap: 2907640 / 3670016 total-alloc: 825744 ;; alloc 91750 expected used: 2999486 ;; diff: 34 ;; used / heap: 2999424 / 3670016 total-alloc: 917494 ;; alloc 91750 expected used: 3091270 ;; diff: 34 ;; used / heap: 3091208 / 3670016 total-alloc: 1009244 ;; alloc 91750 expected used: 3183054 ;; diff: 34 ;; used / heap: 3182992 / 3670016 total-alloc: 1100994 ;; alloc 91750 expected used: 3274838 ;; diff: 34 ;; used / heap: 3274776 / 3670016 total-alloc: 1192744 ;; alloc 91750 expected used: 3366622 ;; diff: 34 ;; used / heap: 3366560 / 3670016 total-alloc: 1284494 ;; alloc 91750 expected used: 3458406 ;; diff: 34 ;; used / heap: 3458344 / 3670016 total-alloc: 1376244 ;; alloc 91750 expected used: 3550190 ;; diff: 34 ;; used / heap: 3550128 / 3670016 total-alloc: 1467994 ;; alloc 91750 expected used: 3641974 ;; diff: 34 ;; used / heap: 3641912 / 3670016 total-alloc: 1559744 ;; alloc 91750 expected used: 3733758 ;; diff: 1835042 ;; used / heap: 5568704 / 7340032 total-alloc: 1651494 <- heap grew ;; alloc 183500 expected used: 5752300 ;; diff: 36 ;; used / heap: 5752240 / 7340032 total-alloc: 1834994 ;; alloc 183500 expected used: 5935836 ;; diff: 36 ;; used / heap: 5935776 / 7340032 total-alloc: 2018494 ;; alloc 183500 expected used: 6119372 ;; diff: 36 ;; used / heap: 6119312 / 7340032 total-alloc: 2201994 ;; alloc 183500 expected used: 6302908 ;; diff: 36 ;; used / heap: 6302848 / 7340032 total-alloc: 2385494 ;; alloc 183500 expected used: 6486444 ;; diff: 36 ;; used / heap: 6486384 / 7340032 total-alloc: 2568994 ;; alloc 183500 expected used: 6669980 ;; diff: 36 ;; used / heap: 6669920 / 7340032 total-alloc: 2752494 ;; alloc 183500 expected used: 6853516 ;; diff: 36 ;; used / heap: 6853456 / 7340032 total-alloc: 2935994 ;; alloc 183500 expected used: 7037052 ;; diff: 36 ;; used / heap: 7036992 / 7340032 total-alloc: 3119494 ;; alloc 183500 expected used: 7220588 ;; diff: 36 ;; used / heap: 7220528 / 7340032 total-alloc: 3302994 ;; alloc 183500 expected used: 7404124 ;; diff: 3670052 ;; used / heap: 11074080 / 14680064 total-alloc: 3486494 <- heap grew ;; alloc 367001 expected used: 11441177 ;; diff: 39 ;; used / heap: 11441120 / 14680064 total-alloc: 3853495 ;; alloc 367001 expected used: 11808217 ;; diff: 39 ;; used / heap: 11808160 / 14680064 total-alloc: 4220496 ;; alloc 367001 expected used: 12175257 ;; diff: 39 ;; used / heap: 12175200 / 14680064 total-alloc: 4587497 ;; alloc 367001 expected used: 12542297 ;; diff: 39 ;; used / heap: 12542240 / 14680064 total-alloc: 4954498 ;; alloc 367001 expected used: 12909337 ;; diff: 39 ;; used / heap: 12909280 / 14680064 total-alloc: 5321499 ;; alloc 367001 expected used: 13276377 ;; diff: 39 ;; used / heap: 13276320 / 14680064 total-alloc: 5688500 ;; alloc 367001 expected used: 13643417 ;; diff: 39 ;; used / heap: 13643360 / 14680064 total-alloc: 6055501 ;; alloc 367001 expected used: 14010457 ;; diff: 39 ;; used / heap: 14010400 / 14680064 total-alloc: 6422502 ;; alloc 367001 expected used: 14377497 ;; diff: 39 ;; used / heap: 14377440 / 14680064 total-alloc: 6789503 ;; alloc 367001 expected used: 14744537 ;; diff: 7340071 ;; used / heap: 22084512 / 29360128 total-alloc: 7156504 <- heap grew ;; alloc 734003 expected used: 22818611 ;; diff: 37 ;; used / heap: 22818552 / 29360128 total-alloc: 7890507 ;; alloc 734003 expected used: 23552651 ;; diff: 37 ;; used / heap: 23552592 / 29360128 total-alloc: 8624510 ;; alloc 734003 expected used: 24286691 ;; diff: 37 ;; used / heap: 24286632 / 29360128 total-alloc: 9358513 ;; alloc 734003 expected used: 25020731 ;; diff: 37 ;; used / heap: 25020672 / 29360128 total-alloc: 10092516 ;; alloc 734003 expected used: 25754771 ;; diff: 37 ;; used / heap: 25754712 / 29360128 total-alloc: 10826519 ;; alloc 734003 expected used: 26488811 ;; diff: 37 ;; used / heap: 26488752 / 29360128 total-alloc: 11560522 ;; alloc 734003 expected used: 27222851 ;; diff: 37 ;; used / heap: 27222792 / 29360128 total-alloc: 12294525 ;; alloc 734003 expected used: 27956891 ;; diff: 37 ;; used / heap: 27956832 / 29360128 total-alloc: 13028528 ;; alloc 734003 expected used: 28690931 ;; diff: 37 ;; used / heap: 28690872 / 29360128 total-alloc: 13762531 ;; alloc 734003 expected used: 29424971 ;; diff: 14680101 ;; used / heap: 44104976 / 58720256 total-alloc: 14496534 <- heap grew ;; alloc 1468006 expected used: 45573078 ;; diff: 34 ;; used / heap: 45573016 / 58720256 total-alloc: 15964540 ;; alloc 1468006 expected used: 47041118 ;; diff: 34 ;; used / heap: 47041056 / 58720256 total-alloc: 17432546 ;; alloc 1468006 expected used: 48509158 ;; diff: 34 ;; used / heap: 48509096 / 58720256 total-alloc: 18900552 ;; alloc 1468006 expected used: 49977198 ;; diff: 34 ;; used / heap: 49977136 / 58720256 total-alloc: 20368558 ;; alloc 1468006 expected used: 51445238 ;; diff: 34 ;; used / heap: 51445176 / 58720256 total-alloc: 21836564 ;; alloc 1468006 expected used: 52913278 ;; diff: 34 ;; used / heap: 52913216 / 58720256 total-alloc: 23304570 ;; alloc 1468006 expected used: 54381318 ;; diff: 34 ;; used / heap: 54381256 / 58720256 total-alloc: 24772576 ;; alloc 1468006 expected used: 55849358 ;; diff: 34 ;; used / heap: 55849296 / 58720256 total-alloc: 26240582 ;; alloc 1468006 expected used: 57317398 ;; diff: 34 ;; used / heap: 57317336 / 58720256 total-alloc: 27708588 ;; alloc 1468006 expected used: 58785438 ;; diff: 30094173 ;; used / heap: 88879515 / 118908534 total-alloc: 29176594 <- heap grew ;; alloc 2972713 expected used: 91852324 ;; diff: 39 ;; used / heap: 91852267 / 118908534 total-alloc: 32149307 ;; alloc 2972713 expected used: 94825076 ;; diff: 39 ;; used / heap: 94825019 / 118908534 total-alloc: 35122020 ;; alloc 2972713 expected used: 97797828 ;; diff: 39 ;; used / heap: 97797771 / 118908534 total-alloc: 38094733 ;; alloc 2972713 expected used: 100770580 ;; diff: 39 ;; used / heap: 100770523 / 118908534 total-alloc: 41067446 ;; alloc 2972713 expected used: 103743332 ;; diff: 39 ;; used / heap: 103743275 / 118908534 total-alloc: 44040159 ;; alloc 2972713 expected used: 106716084 ;; diff: 39 ;; used / heap: 106716027 / 118908534 total-alloc: 47012872 ;; alloc 2972713 expected used: 109688836 ;; diff: 39 ;; used / heap: 109688779 / 118908534 total-alloc: 49985585 ;; alloc 2972713 expected used: 112661588 ;; diff: 39 ;; used / heap: 112661531 / 118908534 total-alloc: 52958298 ;; alloc 2972713 expected used: 115634340 ;; diff: 39 ;; used / heap: 115634283 / 118908534 total-alloc: 55931011 ;; alloc 2972713 expected used: 118607092 ;; diff: 60940671 ;; used / heap: 179547667 / 240789797 total-alloc: 58903724 <- heap grew ;; alloc 6019744 expected used: 185567507 ;; diff: 32 ;; used / heap: 185567443 / 240789797 total-alloc: 64923468 ;; alloc 6019744 expected used: 191587283 ;; diff: 32 ;; used / heap: 191587219 / 240789797 total-alloc: 70943212 ;; alloc 6019744 expected used: 197607059 ;; diff: 32 ;; used / heap: 197606995 / 240789797 total-alloc: 76962956 ;; alloc 6019744 expected used: 203626835 ;; diff: 32 ;; used / heap: 203626771 / 240789797 total-alloc: 82982700 ;; alloc 6019744 expected used: 209646611 ;; diff: 32 ;; used / heap: 209646547 / 240789797 total-alloc: 89002444 ;; alloc 6019744 expected used: 215666387 ;; diff: 32 ;; used / heap: 215666323 / 240789797 total-alloc: 95022188 ;; alloc 6019744 expected used: 221686163 ;; diff: 32 ;; used / heap: 221686099 / 240789797 total-alloc: 101041932 ;; alloc 6019744 expected used: 227705939 ;; diff: 32 ;; used / heap: 227705875 / 240789797 total-alloc: 107061676 ;; alloc 6019744 expected used: 233725715 ;; diff: 32 ;; used / heap: 233725651 / 240789797 total-alloc: 113081420 ;; alloc 6019744 expected used: 239745491 ;; diff: 123404810 ;; used / heap: 363150205 / 487599354 total-alloc: 119101164 <- heap grew ;; alloc 12189983 expected used: 375340284 ;; diff: 33 ;; used / heap: 375340221 / 487599354 total-alloc: 131291147 ;; alloc 12189983 expected used: 387530300 ;; diff: 33 ;; used / heap: 387530237 / 487599354 total-alloc: 143481130 ;; alloc 12189983 expected used: 399720316 ;; diff: 33 ;; used / heap: 399720253 / 487599354 total-alloc: 155671113 ;; alloc 12189983 expected used: 411910332 ;; diff: 33 ;; used / heap: 411910269 / 487599354 total-alloc: 167861096 ;; alloc 12189983 expected used: 424100348 ;; diff: 33 ;; used / heap: 424100285 / 487599354 total-alloc: 180051079 ;; alloc 12189983 expected used: 436290364 ;; diff: 33 ;; used / heap: 436290301 / 487599354 total-alloc: 192241062 ;; alloc 12189983 expected used: 448480380 ;; diff: 33 ;; used / heap: 448480317 / 487599354 total-alloc: 204431045 ;; alloc 12189983 expected used: 460670396 ;; diff: 33 ;; used / heap: 460670333 / 487599354 total-alloc: 216621028 ;; alloc 12189983 expected used: 472860412 ;; diff: 33 ;; used / heap: 472860349 / 487599354 total-alloc: 228811011 ;; alloc 12189983 expected used: 485050428 ;; diff: 33 ;; used / heap: 485050365 / 487599354 total-alloc: 241000994 ;; alloc 12189983 expected used: 497240444 ;; diff: 249894710 ;; used / heap: 747135058 / 987388707 total-alloc: 253190977 <- heap grew ;; alloc 24684717 expected used: 771819871 ;; diff: 35 ;; used / heap: 771819810 / 987388707 total-alloc: 277875694 ;; alloc 24684717 expected used: 796504623 ;; diff: 35 ;; used / heap: 796504562 / 987388707 total-alloc: 302560411 ;; alloc 24684717 expected used: 821189375 ;; diff: 35 ;; used / heap: 821189314 / 987388707 total-alloc: 327245128 ;; alloc 24684717 expected used: 845874127 ;; diff: 35 ;; used / heap: 845874066 / 987388707 total-alloc: 351929845 ;; alloc 24684717 expected used: 870558879 ;; diff: 35 ;; used / heap: 870558818 / 987388707 total-alloc: 376614562 ;; alloc 24684717 expected used: 895243631 ;; diff: 35 ;; used / heap: 895243570 / 987388707 total-alloc: 401299279 ;; alloc 24684717 expected used: 919928383 ;; diff: 35 ;; used / heap: 919928322 / 987388707 total-alloc: 425983996 ;; alloc 24684717 expected used: 944613135 ;; diff: 35 ;; used / heap: 944613074 / 987388707 total-alloc: 450668713 ;; alloc 24684717 expected used: 969297887 ;; diff: 35 ;; used / heap: 969297826 / 987388707 total-alloc: 475353430 ;; alloc 24684717 expected used: 993982639 ;; diff: 506036755 ;; used / heap: 1500019298 / 1999462147 total-alloc: 500038147 <- heap grew