2011-01-14 18 views
13

Examinando tipos de Javascript Estoy tratando de averiguar cuál es el tamaño máximo de almacenamiento para algunos tipos de datos. Por ejemplo, configuré un algoritmo recursivo rápido para aumentar el tamaño de var hasta que el navegador falle, lo que termina siendo cerca de 128mb (o tal vez 256) para cadenas en mi versión existente de chrome.¿Tamaño máximo de Javascript para los tipos?

Lo he estado haciendo de la manera dolorosa porque no pude encontrar ninguna especificación sobre esto, pero los constantes bloqueos del navegador hacen que esta sea una prueba dolorosa (intentar capturar parece inútil por alguna razón con este problema en particular).

Busco 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.

... ¿quizás esto es algo que debe identificarse como implementado en los navegadores?

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

el tipo de número tiene exactamente 18437736874454810627 (es decir, 2^3^64-2) 53 + valores, lo que representa el doble precisión 64- formato de bit IEEE 754 valores como se especifica en el estándar IEEE para aritmética de punto flotante binario, excepto que los valores distintivos "Not-a-Number" 9007199254740990 (es decir, 2^53-2) del estándar IEEE se representan en ECMAScript como un único valor especial de NaN.

Pero entonces no veo nada acerca de los objetos.

¿Qué puedo esperar para usar en los navegadores? ¿Existe alguna base de código que ayude a administrar objetos y cadenas de gran tamaño?

¿Cuánta memoria puedo asignar en un solo script?

Respuesta

7

Como usted ya indicó, la especificación no not indica los límites de tamaño/requisitos para los tipos además de Number.

Así que esto definitivamente queda a la implementación.

Por ejemplo, el límite de cadenas de Chrome parece estar codificado en alrededor de 512 mb (y menos en 32 bits).

Esto pone un límite en la posible petición de asignación máximamente en las versiones de 32 bits de 2^27-1. La longitud máxima de la secuencia plana es ~ 2^28 (512 MB de espacio) y la longitud máxima de la cadena es 2^29-1, por lo que ninguno de los límites detecta el problema (en su lugar, arrojaríamos una excepción de falta de memoria lo hicieron).

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

En cuanto a los otros navegadores van, esto tendría un poco de investigación, por ejemplo, mirando el código de Firefox. Pero dudo que podamos hacer lo mismo para IE/Opera.

+0

Así que no es realmente no hay un área central para este tipo de información? – Incognito

+0

En realidad no, pero de nuevo si está llegando a esos límites es muy probable que esté haciendo algo que no se ajusta al entorno del navegador :) Aunque todavía es interesante acceder a la información, pero como dije, tendrá que hacer mucha excavación en google etc. para encontrarlo. –

+0

Al igual que en cualquier otro idioma, preguntar '¿cuál es la longitud máxima de una cadena 'es análogo a preguntar' qué tan RAM tiene la computadora '. Las implementaciones pueden o no limitarlo (como el caso de Chrome) pero al final del día, una cadena es simplemente una matriz de bytes (y de hecho, en la mayoría de los intérpretes de JavaScript existe una delgada capa alrededor de nulos) C cadenas). – slebetman

0

He enumerado algunos límites típicos para las cadenas en another answer. Básicamente, estás en territorio seguro hasta una longitud de cadena de 2 caracteres.

5

La sección 6.1.4 de ECMA es explícita al respecto.

"El tipo de cadena es el conjunto de todas las secuencias ordenadas de cero o más valores de número entero sin signo de 16 bits (‘elementos’) hasta una longitud máxima de 2^53-1 elementos"

Cuestiones relacionadas