Pregunta

Mirando hacia tipos de javascript que estoy tratando de averiguar cuál es el tamaño máximo de almacenamiento para algunos tipos de datos son. Por ejemplo, he creado un algo recursivo rápida para aumentar el tamaño var hasta que los bloqueos del navegador, que termina siendo un lugar cerca de 128 MB (o tal vez es 256) para cuerdas en mi versión existente de cromo.

He estado haciendo de la manera dolorosa, porque no podía encontrar ningún especificaciones sobre esto, pero constantes bloqueos del navegador hacer de esto una dolorosa prueba (intento de captura parece inútil por alguna razón con este tema en particular).

Estoy buscando información sobre el tamaño máximo de almacenamiento de otros tipos también (array, objeto, funciones, cadenas, números, Bools ...)

EMCA-262 sección 8.4 es vago en este

La longitud de una cadena es el número de elementos (es decir, valores de 16 bits) dentro de ella. La cadena vacía tiene longitud cero y por lo tanto no contiene elementos.

... así que quizás esto es algo que debe ser identificado como se aplica en los navegadores?

ECMA embargo, no nos dice acerca de los números, por ejemplo,

El tipo tiene exactamente Número 18437736874454810627 (es decir, 2 ^ 53 + 3 ^ 64-2), lo que representa los valores de precisión doble formato IEEE 754 valores de 64 bits, como se especifica en la Norma IEEE para binario aritmética de punto flotante, excepto que la 9007199254740990 (es decir, 2 ^ 53-2) distinto “No-a-Number” valores de la Norma IEEE están representados en ECMAScript como un único valor especial NaN.

Pero entonces yo no veo nada acerca de los objetos.

¿Qué puedo esperar para su uso en navegadores? ¿Hay alguna base de código por ahí que ayuda a manejar objetos muy grandes y cadenas?

¿Cuánta memoria puedo asignar en una única secuencia de comandos?

¿Fue útil?

Solución

As you already stated, the specification does not state any size limits / requirements for types besides Number.

So this is definitally left to the implementation.

For example, Chrome's limit on strings seems to be hard coded at around 512mb (and less on 32bit).

This puts a limit on the maximally possible allocation request in 32-bit versions of 2^27-1. The maximal flat string length is ~2^28 (512MB space), and the maximal string length is 2^29-1, so neither of these limits catch the problem (we would throw an Out-Of-Memory exception instead if they did).

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

As far as the other browsers go, this would need some research e.g. looking into Firefox's code. But I doubt we can do the same for IE / Opera.

Otros consejos

ECMA section 6.1.4 is explicit about this.

"The String type is the set of all ordered sequences of zero or more 16-bit unsigned integer values (“elements”) up to a maximum length of 2^53-1 elements"

I have listed some typical limits for strings in another answer. Basically, you are in safe territory up to a string length of 227 characters.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top