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

198
Visualizações
¿Vale la pena usar un número entero para almacenar muchos booleanos?

Estaba considerando formas de reducir el consumo de memoria, y constantemente se menciona que un bool ocupa más memoria de la que lógicamente necesita, como un subproducto del diseño del procesador. a veces también se menciona que uno podría almacenar varios bool dentro de un int . Me pregunto si esto sería realmente más eficiente en memoria.

si tenemos un caso de uso donde podemos usar una porción significativa de 32 (o 64) bool . y decidimos almacenarlos todos en un solo int. entonces en la superficie hemos guardado

7 (bits) * 32 (size of int) = 224 (bits) or 28 (bytes)

pero para obtener cada uno de esos bits del int, necesitábamos usar algún método de enmascaramiento como:

  • cambiando un poco el int en ambas direcciones (int<<x)>>y aquí necesitamos cargar y almacenar x,y, que probablemente sean un int, pero podría reducirlos según el caso de uso
  • enmascarando el int : int & int2 aquí también almacenamos un int adicional, que se almacena y carga

incluso si estos no se almacenan como variables y se definen estáticamente dentro del código, aún termina usando memoria adicional, ya que aumentará la huella de memoria de las instrucciones. así como las instrucciones para los pasos de enmascaramiento.

¿Hay alguna forma de hacer esto que en realidad no sea peor para el uso de la memoria que simplemente recibir el golpe en 7 bits desperdiciados?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Estás describiendo un ejemplo de libro de texto de una compensación.
Sí, varios bools en un int son enormemente más eficientes en memoria, en sí mismos.
Sí, necesitas gastar código para usar eso.
Sí, por solo unos pocos booleanos (para diferentes valores de "pocos"), el código puede ocupar más espacio del que ahorra.

Sin embargo, podría mirar el tipo de memoria que se utiliza. En algunos entornos, la RAM (que se ahorra con su idea) es mucho más cara que la ROM (que se debe pagar por su idea).
Además, el precio a pagar se paga principalmente una vez por la implementación y solo se paga una fracción por el uso, especialmente cuando el código de uso se reutiliza, por ejemplo, en bucles.

En total, en el caso de muchos bools, puede ahorrar más de lo que paga.
El punto de ahorro real debe determinarse para el caso especial.

Por otro lado, se ha perdido la "moneda" en la etiqueta de precio de la idea. No solo pagas en memoria, también pagas en tiempo de ejecución. Centró su pregunta en la memoria, por lo que no daré más detalles aquí. Pero para cualquier momento crítico, debe tener en cuenta el tiempo de ejecución más largo. Puede encontrar que ahorrar memoria es bastante factible con su idea, pero todo se vuelve insoportablemente lento.
Nuevamente desde el otro lado, como señala Eric Postpischil en un comentario, la velocidad de ejecución también puede mejorar debido a los efectos de caché de una mejor huella de memoria.

over 4 years ago · Santiago Trujillo Relatório

0

Me pregunto si esto sería realmente más eficiente en memoria.

Potencialmente sí. Almacenar múltiples bools dentro de un solo objeto puede usar menos almacenamiento en comparación con tener un objeto bool distinto para cada uno, si la cantidad de bools es lo suficientemente grande como para compensar el costo en el uso de la memoria de las instrucciones.

Considere también que hay más consideraciones que la eficiencia del espacio. Por lo general, las personas también están preocupadas por la eficiencia del tiempo. En este sentido, los bools de compactación pueden ser más o menos eficientes dependiendo de los detalles del caso de uso.

¿Vale la pena usar un número entero para almacenar muchos booleanos?

Puede valer la pena el esfuerzo. También puede ser contraproducente. La diferencia puede ser minúscula o significativa. Tanto en términos de eficiencia de tiempo como de espacio. La forma más precisa de averiguarlo es medirlo.

Sin embargo, no es necesario implementar esto usted mismo, ya que hay soluciones en la biblioteca estándar. std::vector<bool> y std::bitset implementan almacenamiento compacto de bools. El uso de campos de bits también puede ser una opción (solo recuerde no confiar en la representación interna).

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