tabla - ¿Cuál es la sobrecarga de uso de memoria para una aplicación de 64 bits?
tabla de pesos kg m2 de estructuras para naves (3)
Creo que puede haber otra razón que se remonta a mucho tiempo en el sentido de que las variables deben almacenarse en la memoria en un límite de 64 bits en una dirección que es ... xxxxx000 para leer en un solo mordisco, si no es así, debe leerlo en un byte a la vez
Por lo que he encontrado hasta ahora, está claro que los programas compilados para una arquitectura de 64 bits usan el doble de RAM para los punteros que sus alternativas de 32 bits: https://superuser.com/questions/56540/32-bit-vs-64-bit-systems .
¿Eso significa que el código compilado para 64 bits utiliza una RAM media dos veces mayor que la versión de 32 bits?
De alguna manera lo dudo, pero me pregunto cuál es la verdadera sobrecarga. Supongo que los tipos pequeños, como short
, byte
y char
son del mismo tamaño en una arquitectura de 64 bits. Aunque no estoy muy seguro acerca de los byte
. Dado que muchas aplicaciones funcionan con cadenas grandes (como navegadores web, etc.), que consisten principalmente de matrices de caracteres en la mayoría de las implementaciones, la sobrecarga puede no ser tan grande.
Entonces, incluso si los tipos numéricos como int
y long
son más grandes en 64 bits, ¿tendría un efecto significativo sobre el uso de RAM o no?
Depende del estilo de programación (y del idioma, pero te refieres a C).
- Si trabaja mucho con punteros (o tiene muchas referencias en algunos idiomas), el consumo de RAM aumenta.
- Si utiliza una gran cantidad de datos con tamaño fijo, como
double
oint32_t
, el consumo de RAM no aumenta. - Para tipos como
int
olong
, depende de la arquitectura; puede haber diferencias entre Linux y Windows. Here puedes ver las alternativas que tienes. En resumen, Windows usa LLP64, lo que significa quelong long
y los punteros son de 64 bits, mientras que Linux usa LP64, dondelong
es de 64 bit. Otras arquitecturas también pueden hacerint
o inclusoshort
64 bit, pero son bastante poco comunes. -
float
ydouble
deben seguir siendo del mismo tamaño en todos los casos.
Por lo tanto, puede ver que depende en gran medida del uso de los tipos de datos.
Hay algunas razones para que el consumo de memoria aumente. Sin embargo, la sobrecarga de 64b frente a 32b depende de una aplicación a otra.
La razón principal es usar muchos punteros en su código . Sin embargo, una matriz asignada dinámicamente en un código compilado para 64 bits y en ejecución en un sistema operativo de 64 bits tendría el mismo tamaño que la matriz asignada en un sistema de 32 bits. Solo la dirección de la matriz será más grande, el tamaño del contenido será el mismo ( excepto cuando el tamaño de letra haya cambiado ; sin embargo, eso no debería suceder y debería estar bien documentado).
Otro aumento de huella se debería a la alineación de la memoria . En el modo de 64 bits, la alineación debe considerar una dirección de 64 bits, por lo que debería agregar una pequeña sobrecarga.
Probablemente el tamaño del código aumentará . En algunas arquitecturas, el ISA de 64 bits podría ser un poco más grande. Además, ahora tendría que hacer llamadas a direcciones de 64 bits.
Cuando se ejecutan en los registros de 64 bits son más grandes (64 bits) por lo que si utiliza muchos tipos numéricos, el compilador también podría colocarlos en registros, por lo que no necesariamente significa que su huella de RAM aumentaría. Es probable que el uso de variables dobles produzca un aumento de la huella de memoria si no se almacenan en registros 64b.
Cuando se utilizan lenguajes compilados JIT como Java, .NET, es probable que el aumento de la huella del código 64b sea mayor ya que el entorno de ejecución generará una sobrecarga adicional a través del uso del puntero, estructuras de control ocultas, etc.
Sin embargo, no hay un número mágico que describa la sobrecarga de la huella de memoria de 64 bits. Eso debe medirse de una aplicación a otra. Por lo que he visto, nunca obtuve más del 20% de aumento en la huella para una aplicación que se ejecuta en 64 bits, en comparación con 32 bits. Sin embargo, eso se basa exclusivamente en las aplicaciones que encontré y estoy usando principalmente C y C ++.