Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

319
Vistas
JavaScript: Pregunta V8: ¿se agrupan los enteros pequeños?

estaba mirando este documento de diseño de V8 donde tiene una sección para Constant Pool Entries

dice

Los conjuntos de constantes se utilizan para almacenar objetos de montón y pequeños enteros a los que se hace referencia como constantes en el código de bytes generado. y

... Los números enteros pequeños y los tipos extraños referenciados fuertes tienen códigos de bytes para cargarlos directamente y no van al grupo constante.

Así que estoy confundido: ¿se agrupan los pequeños enteros o no?

Tengo entendido que no vale la pena agrupar pequeños enteros si sizeof(int) < sizeof(int *) - porque es más barato simplemente copiar el entero real en lugar de copiar el puntero que apunta al entero en el grupo constante. Además, las variables que contienen números enteros se pueden optimizar para almacenarlas directamente en los registros de la CPU y evitar que se asignen primero en la memoria.

Además, ¿están ubicados en el montón V8 o en la pila? Siempre entendí que smis son solo los valores inmediatos asignados en la pila en lugar de ser un puntero + un número entero asignado en el montón. Además, si toma una instantánea del montón con Chrome DevTool, no puede encontrar smis en la instantánea del montón; solo el número del montón, como los números enteros grandes o el doble como 3.14, están en el montón hasta que vi este artículo https://v8.dev/blog/pointer -compresión#valor-etiquetado-en-v8

Los valores de JavaScript en V8 se representan como objetos y se asignan en el montón de V8, sin importar si son objetos, matrices, números o cadenas. Esto nos permite representar cualquier valor como un puntero a un objeto.

Ahora estoy desconcertado: ¿también se asignan smis en el montón?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Desarrollador V8 aquí.

¿Se agrupan los pequeños enteros o no?

No lo son (al menos no en este momento). Dicho esto, este es un pequeño detalle de implementación y podría hacerse de cualquier manera: sería totalmente posible usar el grupo constante para Smis. Supongo que se tomó la decisión de construir maquinaria especial para Smis (en lugar de reutilizar el conjunto de constantes de propósito general) porque las cosas resultaron ser más eficientes de esa manera.

no vale la pena agrupar pequeños enteros si sizeof(int) < sizeof(int *)

Los detalles son diferentes (un Smi no es un int , y las ranuras de grupos constantes se referencian mediante un índice en lugar de un puntero de C++), pero este razonamiento va en la dirección correcta: evitar las indirectas puede ahorrar tiempo y memoria.

¿Smis también se asignan en el montón?

Sí, todo se asigna en el montón. La pila solo es útil para cosas temporales (y suficientemente pequeñas); eso en gran medida no tiene relación con el tipo de cosa.

El "truco" de Smis es que no se almacenan como objetos separados : cuando tienes un objeto que se refiere a un Smi, como let foo = {smi: 42} , entonces el valor 42 puede codificarse y almacenarse en smi. directamente dentro del objeto "foo" (mientras que si el valor fuera 42.5 , entonces el objeto almacenaría un puntero a un "HeapNumber" separado). Pero como el objeto está en el montón, también lo está el Smi.

@DanielCruz

Lo que entiendo [...] es que los enteros pequeños constantes se agrupan. Los enteros pequeños variables no lo son.

No. Cualquier literal que ocurra en el código fuente es "constante". Si usa let o const para sus variables no tiene nada que ver con esto.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda