testing the gc pasted by megane on Sat Sep 22 14:19:33 2018

(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

no title added by megane on Sat Sep 22 15:26:33 2018

(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