Domanda

Guardando in tipi JavaScript che sto cercando di scoprire che cosa la dimensione massima di archiviazione per alcuni tipi di dati sono. Per esempio, ho creato un algo ricorsiva veloce per aumentare le dimensioni del var fino ai crash del browser, che finisce per essere da qualche parte vicino a 128 MB (o forse è 256) per le stringhe sulla mia versione esistente di Chrome.

ho fatto nel modo doloroso perché non riuscivo a trovare nessuna specifiche su questo, ma crash del browser costanti fanno di questa una dolorosa prova (try cattura sembra inutile per qualche ragione con questo particolare problema).

sto cercando informazioni sulla dimensione massima di archiviazione per gli altri tipi anche (array, oggetti, funzioni, stringhe, numeri, Caccio ...)

EMCA-262 sezione 8.4 è vaga su questo

La lunghezza di una stringa è il numero di elementi (cioè valori a 16 bit) al suo interno. La stringa vuota ha lunghezza zero e contiene pertanto alcun elemento.

... quindi forse questo è qualcosa che deve essere identificato come implementata nei browser?

ECMA ha tuttavia ci raccontano i numeri, per esempio,

il tipo di numero ha esattamente 18437736874454810627 (cioè, 2 ^ 64-2 ^ 53 + 3) i valori, che rappresentano la doppia precisione IEEE formato 754 valori a 64 bit come specificato nella IEEE Standard per Binary aritmetica alla virgola mobile, eccetto che il 9007199254740990 (cioè, 2 ^ 53-2) distinto “Not-a-Number” valori della IEEE standard sono rappresentati in ECMAScript come un singolo valore speciale NaN.

Ma allora non vedo nulla di oggetti.

Che cosa posso aspettarmi da utilizzare nei browser? Esiste un codice di base là fuori che consente di gestire gli oggetti di grandi dimensioni e le stringhe?

Quanta memoria posso allocare in un singolo script?

È stato utile?

Soluzione

Come già detto, la specifica fa non Stato di qualsiasi dimensione Limiti / requisiti per i tipi di oltre Number.

Quindi questo è definitally lasciato alla implementazione.

Per esempio, il limite di Chrome su stringhe sembra essere codificato duro a circa 512 MB (e meno sui 32 bit).

Questo pone un limite al massimo eventuale richiesta di assegnazione nelle versioni a 32 bit di 2 ^ 27-1. La stringa piatta massima lunghezza è ~ 2 ^ 28 (spazio 512), e la lunghezza della corda massima è 2 ^ 29-1, così nessuno di questi limiti di cattura del problema (ci sarebbe un'eccezione Out-Of-Memory, invece, se hanno fatto).

See: http://code.google.com/p/v8/issues / dettagli? id = 362 # C9

Per quanto riguarda gli altri browser andare, questo avrebbe bisogno di qualche ricerca per esempio esaminando il codice di Firefox. Ma dubito che possiamo fare lo stesso per IE / Opera.

Altri suggerimenti

sezione ECMA 6.1.4 è esplicito su questo.

"Il tipo String è l'insieme di tutte le sequenze ordinate di zero o più a 16 bit valori interi senza segno (‘elementi’) fino ad una lunghezza massima di 2 ^ 53-1 elementi"

Ho elencato alcuni limiti tipici per archi in un'altra risposta . In sostanza, ci si trova in territorio sicuro fino ad una lunghezza di stringa di 2 27 caratteri.

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