Citat:
korak: Terminator na kraju stringa? Pa sta je to nego, svojim mestom u stringu, oznaka duzine stringa.
Dužina stringa na početku stringa? Pa šta je to nego podatak koji govori gdje bi trebao biti kraj stringa (terminator).
Još nije odgovoreno na pitanje: u čemu je prednost držanja podatka o dužini stringa u samom stringu u odnosu na držanje tog podatka u nekoj nezavisnoj varijabli?
Citat:
korak: Koliko procesorskog vremena potrošiš a još nisi ni počeo sabiranje.
A kako ti misliš uopšte doći do tih podataka o dužini tih tvojih stringova?!
Imaš li ti neki način da prebrojiš karaktere u stringu, a da ne trošiš procesorsko vreme?
Sa klasičnim terminisanim stringovima imaš izbor: dužinu stringa možeš izračunati odmah, možeš kasnije, a možeš i onda kad ti zatreba (za mnoge operacije sa stringovima uopšte nije potrebno znati dužinu).
Sa tvojim stringovima nemaš izbor: moraš odmah da računaš dužinu, svejedno da li ti treba sad ili ti ne treba sad ili ti nikad neće ni trebati.
Dalje, npr. prilikom čitanja stringa iz memorije, u slučaju stringa sa terminatorom možeš u jednoj operaciji izvrišiti čitanje karaktera iz stringa uraditi sa njim šta trebaš i uporediti ga sa terminatorom '\0' da vidiš da li je stigao do kraja.
Terminator '\0' će u kompajleru proći kao immediate operand (npr. #opr8i) i takav biti upisan u asmeblersku naredbu.
Takve naredbe zahtjevaju manje procesorskih ciklusa od onih koji imaju neki drugi operand koga treba prethodno dovući iz memorije u CPU.
Sa tvojim stringovima, ti ćeš morati u svakoj iteraciji (čitanju jednog karaktera) upoređivati svoj brojač sa prvim karakterom iz stringa u kom ti leži dužina stringa. To nije immediate operand i takva asemblerska instrukcija ce trošiti više clock-ova nego ona gorepomenuta.
I šta će na kraju da troši više procesorskog vremena?
Ja ne znam tačno, ne poznajem iznutrice tvog procesora, ali ti možda znaš pa provjeri...