mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-23 15:55:23 +00:00
ORC: make the adaptive strategy the default in order to fight memory consumption (#16250)
* ORC: make the adaptive strategy the default in order to fight memory consumption * added missing test case
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
discard """
|
||||
outputsub: "(allocCount: 4014, deallocCount: 4012)"
|
||||
outputsub: "(allocCount: 4302, deallocCount: 4300)"
|
||||
cmd: "nim c --gc:orc -d:nimAllocStats $file"
|
||||
"""
|
||||
|
||||
|
||||
38
tests/arc/torcbench.nim
Normal file
38
tests/arc/torcbench.nim
Normal file
@@ -0,0 +1,38 @@
|
||||
discard """
|
||||
output: '''true peak memory: true'''
|
||||
cmd: "nim c --gc:orc -d:release $file"
|
||||
"""
|
||||
|
||||
import lists, strutils, times
|
||||
|
||||
type
|
||||
Base = ref object of RootObj
|
||||
|
||||
Node = ref object of Base
|
||||
parent: DoublyLinkedList[string]
|
||||
le, ri: Node
|
||||
self: Node # in order to create a cycle
|
||||
|
||||
proc buildTree(parent: DoublyLinkedList[string]; depth: int): Node =
|
||||
if depth == 0:
|
||||
result = nil
|
||||
elif depth == 1:
|
||||
result = Node(parent: parent, le: nil, ri: nil, self: nil)
|
||||
when not defined(gcArc):
|
||||
result.self = result
|
||||
else:
|
||||
result = Node(parent: parent, le: buildTree(parent, depth - 1), ri: buildTree(parent, depth - 2), self: nil)
|
||||
result.self = result
|
||||
|
||||
proc main() =
|
||||
for i in countup(1, 100):
|
||||
var leakList = initDoublyLinkedList[string]()
|
||||
for j in countup(1, 5000):
|
||||
leakList.append(newString(200))
|
||||
#GC_fullCollect()
|
||||
for i in 0..400:
|
||||
discard buildTree(leakList, 8)
|
||||
|
||||
main()
|
||||
GC_fullCollect()
|
||||
echo getOccupiedMem() < 10 * 1024 * 1024, " peak memory: ", getMaxMem() < 10 * 1024 * 1024
|
||||
Reference in New Issue
Block a user