Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

323
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda