Middle
Millise algoritmi järgi suureneb Go-s lõigu (slice) suurus?
sobes.tech AI
Vastus AI-lt
Go-südamiku suurendamine toimub järgmise algoritmi järgi append() funktsiooni kasutamisel:
- Määratakse uue südamiku (capacity) nõutav maht.
- Kui olemasolev maht on piisav uute elementide paigutamiseks (
cap(s) >= len(s) + len(elements)), siis elemendid lihtsalt lisatakse olemasoleva põhimaatriksi lõppu ning uus südamik osutab sellele alale. - Kui olemasolev maht ei ole piisav, eraldatakse uus põhimaatriks suurema mahuga. Selle uue mahtumise määramise algoritm on järgmine:
- Kui nõutav maht on suurem kui vana maht kahekordne (
requiredCap > 2 * oldCap), siis uus maht on võrdne nõutava väärtusega. - Kui vana maht on väiksem kui 1024 (
oldCap < 1024), siis maht kahekordistub (newCap = oldCap * 2). - Kui vana maht on suurem või võrd 1024 (
oldCap >= 1024), siis maht suurendatakse 25% võrra (newCap = oldCap + oldCap/4) kuni see jõuab või ületab nõutava väärtuse.
- Kui nõutav maht on suurem kui vana maht kahekordne (
- Vanast põhimaatriksist kopeeritakse elemendid uude.
- Uued elemendid lisatakse uue põhimaatriksi lõppu.
- Uus maht võib olla veidi suurem kui arvutatud väärtus mäejoondamise tõttu.
append()funktsioon tagastab uue segmenti, mis osutab uuele põhimaatriksile.
Lisaks sellele võivad vanad segment ja selle põhimaatriks olla eemaldatud prügikoristaja poolt, kui neile enam viiteid ei ole.