Domanda

Esatto: la lunghezza di una stringa equivale alla dimensione in byte? Importa sulla lingua?

Penso di si, ma voglio solo esserne sicuro.

Informazioni aggiuntive: mi chiedo solo in generale. La mia situazione specifica era PHP con MySQL.

Poiché la risposta è no, questo è tutto ciò che devo sapere.

È stato utile?

Soluzione

No. Una stringa con terminazione zero ha un byte aggiuntivo. Una stringa pascal (la corteccia di Delphi) ha un byte in più per la lunghezza. E le stringhe unicode hanno più di un byte per carattere.

Per Unicode dipende dalla codifica. Potrebbe essere di 2 o 4 byte per carattere o persino un mix di 1,2 e 4 byte.

Altri suggerimenti

Dipende interamente dalla piattaforma e dalla rappresentazione.

Ad esempio, in .NET una stringa accetta due byte in memoria per punto di codice UTF-16. Tuttavia, le coppie surrogate richiedono due valori UTF-16 per un carattere Unicode completo nell'intervallo da U + 100000 a U + 10FFFF. Il modulo in memoria ha anche un overhead per la lunghezza della stringa e possibilmente un po 'di padding, oltre al normale overhead dell'oggetto di un puntatore del tipo ecc.

Ora, quando si scrive una stringa sul disco (o sulla rete, ecc.) da .NET, si specifica la codifica (con la maggior parte delle classi predefinita su UTF-8). A quel punto, la dimensione dipende molto dalla codifica. ASCII richiede sempre un singolo byte per carattere, ma è molto limitato (nessun accento, ecc.); UTF-8 fornisce l'intero intervallo Unicode con una codifica variabile (tutti i caratteri ASCII sono rappresentati in un singolo byte, ma altri ne occupano di più). UTF-32 utilizza sempre esattamente 4 byte per qualsiasi carattere Unicode - l'elenco continua.

Come puoi vedere, non è un argomento semplice. Per capire quanto spazio occuperà una stringa dovrai specificare esattamente qual è la situazione - se si tratta di un oggetto in memoria su una piattaforma (e in tal caso, quale piattaforma - potenzialmente anche fino alle impostazioni di implementazione e del sistema operativo) o se si tratta di un modulo con codifica non elaborata come un file di testo e, in tal caso, utilizzando quale codifica.

Dipende da cosa intendi per "lunghezza". Se intendi " numero di caratteri " quindi, no, molte lingue / metodi di codifica utilizzano più di un byte per carattere.

Non sempre, dipende dalla codifica.

Non esiste una risposta singola; dipende dalla lingua e (ricorda che alcune lingue hanno implementazioni multiple!)

Le stringhe ASCII con terminazione zero occupano almeno un byte in più rispetto al " contenuto " della stringa. (È possibile assegnarne altri, a seconda di come è stata creata la stringa.)

Le stringhe con terminazione diversa da zero utilizzano un descrittore (o una struttura simile) per registrare la lunghezza, che richiede ulteriore memoria da qualche parte .

Le stringhe Unicode (in varie lingue) usano due byte per carattere.

Le stringhe in un archivio oggetti possono essere referenziate tramite handle, che aggiunge un livello di riferimento indiretto (e più dati) al fine di semplificare la gestione della memoria.

Hai ragione. Se si codifica come ASCII, esiste un byte per carattere. Altrimenti, è uno o più byte per carattere.

In particolare, è importante sapere come questo influisce sulle operazioni di sottostringa. Se non hai un byte per carattere, s [n] ottiene l'ennesimo byte o l'ennesimo carattere? Ottenere l'ennesimo carattere sarà inefficiente per n grande invece che costante, poiché lo è con un byte per carattere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top