GC: growObj: revert to somewhat more efficient version
This commit is contained in:
parent
8ed3e295a3
commit
9460f7cc4e
1 changed files with 3 additions and 3 deletions
|
|
@ -465,14 +465,14 @@ proc growObj(old: pointer, newsize: int, gch: var TGcHeap): pointer =
|
||||||
sysAssert(ol.typ.kind in {tyString, tySequence}, "growObj: 2")
|
sysAssert(ol.typ.kind in {tyString, tySequence}, "growObj: 2")
|
||||||
sysAssert(allocInv(gch.region), "growObj begin")
|
sysAssert(allocInv(gch.region), "growObj begin")
|
||||||
|
|
||||||
var res = cast[PCell](rawAlloc0(gch.region, newsize + sizeof(TCell)))
|
var res = cast[PCell](rawAlloc(gch.region, newsize + sizeof(TCell)))
|
||||||
var elemSize = 1
|
var elemSize = 1
|
||||||
if ol.typ.kind != tyString: elemSize = ol.typ.base.size
|
if ol.typ.kind != tyString: elemSize = ol.typ.base.size
|
||||||
|
|
||||||
var oldsize = cast[PGenericSeq](old).len*elemSize + GenericSeqSize
|
var oldsize = cast[PGenericSeq](old).len*elemSize + GenericSeqSize
|
||||||
copyMem(res, ol, oldsize + sizeof(TCell))
|
copyMem(res, ol, oldsize + sizeof(TCell))
|
||||||
#zeroMem(cast[pointer](cast[TAddress](res)+% oldsize +% sizeof(TCell)),
|
zeroMem(cast[pointer](cast[TAddress](res)+% oldsize +% sizeof(TCell)),
|
||||||
# newsize-oldsize)
|
newsize-oldsize)
|
||||||
sysAssert((cast[TAddress](res) and (MemAlign-1)) == 0, "growObj: 3")
|
sysAssert((cast[TAddress](res) and (MemAlign-1)) == 0, "growObj: 3")
|
||||||
sysAssert(res.refcount shr rcShift <=% 1, "growObj: 4")
|
sysAssert(res.refcount shr rcShift <=% 1, "growObj: 4")
|
||||||
#if res.refcount <% rcIncrement:
|
#if res.refcount <% rcIncrement:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue