From 2bff7ccaa278a8219d1665e587bf1e7af3179d23 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Wed, 20 Dec 2023 11:10:27 -0500 Subject: [PATCH] Improved memory estimation - #384 [skip ci] --- src/hnswbuild.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/hnswbuild.c b/src/hnswbuild.c index 2058168..bcf4ca2 100644 --- a/src/hnswbuild.c +++ b/src/hnswbuild.c @@ -349,8 +349,11 @@ HnswElementMemory(HnswElement e, int m) elementSize += sizeof(HnswNeighborArray) * (e->level + 1); elementSize += sizeof(HnswCandidate) * (m * (e->level + 2)); - elementSize += sizeof(ItemPointerData); + elementSize += sizeof(List); + elementSize += sizeof(ItemPointerData) + sizeof(uintptr_t); elementSize += VARSIZE_ANY(DatumGetPointer(e->value)); + /* Each allocation has a 64-bit header */ + elementSize += (e->level + 7) * sizeof(uint64); return elementSize; } @@ -428,7 +431,7 @@ BuildCallback(Relation index, CALLBACK_ITEM_POINTER, Datum *values, if (dup != NULL) { HnswAddHeapTid(dup, tid); - buildstate->memoryLeft -= sizeof(ItemPointerData); + buildstate->memoryLeft -= sizeof(ItemPointerData) + sizeof(uintptr_t) + sizeof(uint64); } /* Add to buildstate or free */