Question

Recherche en types javascript j'essaie de savoir ce que la taille de stockage maximale pour certains types de données sont. Par exemple, je mis en place un algo récursive rapide pour augmenter la taille du var jusqu'à ce que les plantages du navigateur, qui finit par être quelque part près de 128 Mo (ou peut-être il est 256) pour les chaînes sur ma version existante de chrome.

Je l'ai fait le chemin douloureux parce que je ne pouvais pas trouver des spécifications à ce sujet, mais les accidents de navigateur constants rendent ce procès douloureux (capture d'essai semble inutile pour une raison quelconque avec cette question).

Je cherche des informations sur la taille de stockage maximale pour les autres types aussi (tableau, objet, fonctions, chaînes, nombres, bools ...)

EMCA-262 l'article 8.4 est vague sur ce

  

La longueur d'une chaîne est le nombre d'éléments (à savoir, les valeurs de 16 bits) en son sein. La chaîne vide a une longueur nulle et ne contient donc pas d'éléments.

... alors peut-être cela est quelque chose qui doit être identifié comme mis en œuvre dans les navigateurs?

ECMA ne nous dit cependant sur les chiffres, par exemple,

  

Le type de numéro a exactement 18437736874454810627 (qui est, 2 ^ 64-2 ^ 53 + 3) valeurs, représentant le double précision au format 64 bits IEEE 754 valeurs telles que spécifiées dans la norme IEEE pour arithmétique binaire à virgule flottante, sauf que les 9007199254740990 (qui est, 2 ^ 53-2) distinct « Not-a-Number » valeurs de la norme IEEE sont représentés dans ECMAScript comme une seule valeur spéciale NaN.

Mais alors je ne vois rien sur les objets.

Que puis-je attendre pour une utilisation dans les navigateurs? Y at-il base de code là-bas qui permet de gérer des objets très grandes et les chaînes?

Combien de mémoire puis-je allouer dans un seul script?

Était-ce utile?

La solution

Comme vous l'avez déjà dit, la spécification ne pas État aucune limite de taille pour les types / exigences en plus Number.

C'est donc definitally laissée à la mise en œuvre.

Par exemple, la limite de Chrome sur les chaînes semble être codées en dur autour de 512 Mo (et moins sur 32 bits).

  

Cela met une limite au maximum   possible demande d'allocation dans les versions 32 bits de 2 ^ 27-1. La chaîne plat maximale   longueur est d'environ 2 ^ 28 (espace de 512 Mo), et la longueur de chaîne maximale est 2 ^ 29-1, donc ni de   ces limites attrapent le problème (nous lancions une exception hors de la mémoire au lieu si   ils l'ont fait).

Voir: http://code.google.com/p/v8/issues / détail? id = 362 # c9

En ce qui concerne les autres navigateurs vont, cela nécessiterait des recherches par exemple à la recherche dans le code de Firefox. Mais je doute que nous pouvons faire la même chose pour IE / Opera.

Autres conseils

section ECMA 6.1.4 est explicite à ce sujet.

« Le type de chaîne est l'ensemble de toutes les séquences de zéro ou plus de 16 bits des valeurs d'entiers non signés ordonnés ( « éléments ») jusqu'à une longueur maximale de 2 ^ 53-1 éléments »

J'ai énuméré quelques limites typiques pour les chaînes dans une autre réponse . En gros, vous êtes dans un territoire sûr jusqu'à une longueur de chaîne de 2 27 caractères.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top