Hier läuft es durch ... Wo knall es denn?
Ohne Fehlerbeschreibung kann keiner helfen.
Nja, es wird einfach in einer Schleife versucht immer wieder einen möglichst großen Block (den aktuell Größten) zu reservieren.
In der inneren Schleife werden verschiedene Größen ausprobiert und es wird sich der möglichen Größe so lange angenähert, bis es grade noch so rein passt.
Wenn man nun ein dynamisches Array in einer Schleife Schritt für Schritt um 1 vergrößtert, dann kann man im Schlimmsten Fall davon ausgehn, daß dieses Array maximal nur ein Drittel so groß werden kann, wie der größte Block.