Acabo de reiniciar el estudio de programación C. Ahora, estoy estudiando la capacidad de almacenamiento de memoria y la diferencia entre bit y byte. Me encontré con esta definición. Hay un cálculo para un sistema de 32 bits. Estoy muy confundido, porque en este cálculo 2 ^ 32 = 4294967296 bytes y significa alrededor de 4 Gigabytes. Mi pregunta es: ¿por qué 2 elevados a 32 resultados de potencia en un número en bytes en lugar de bits?

Gracias por ayudarme.

2
albm 16 jun. 2020 a las 00:57

4 respuestas

La mejor respuesta

Decimos que la memoria es direccionable por bytes, puede pensar que el byte es la unidad de memoria más pequeña, por lo que no está leyendo por bits sino por bytes. La razón podría ser que el tipo de datos más pequeño es 1 byte, incluso el tipo booleano en c / c ++ es 1 byte.

2
Harun Sasmaz 15 jun. 2020 a las 22:02

Hay dos maneras de ver esto:

Un entero de 32 bits puede contener uno de 2 ^ 32 valores diferentes. Por lo tanto, un uint32_t puede representar los valores de 0 a 4294967295.

Una dirección de 32 bits puede representar 2 ^ 32 direcciones diferentes. Y como dijo Scott, en un sistema direccionable por bytes, eso significa que se pueden direccionar 2 ^ 32 bytes diferentes. Por lo tanto, un proceso con punteros de 32 bits puede abordar hasta 4 GiB de memoria virtual. O bien, un microprocesador con un bus de direcciones de 32 bits puede direccionar hasta 4 GiB de RAM.

3
xhienne 15 jun. 2020 a las 23:22

Esa descripción es realmente superficial y pierde muchas consideraciones importantes, especialmente en cuanto a cómo se define y se accede a la memoria.

Básicamente, un valor de N bits tiene 2 N estados posibles, por lo que un valor de 16 bits tiene 65.536 estados posibles. Además, se accede a la memoria como bytes , o valores de 8 bits. Este no siempre fue el caso, las máquinas más antiguas tenían diferentes tamaños de "palabras", de 4 a 36 bits por palabra, ocasionalmente más, pero con el tiempo la palabra de 8 bits, o" byte ", se convirtió en la forma dominante.

En todos los casos, una "dirección" de memoria contiene una "palabra" o, en máquinas más modernas, "byte". La memoria se mide en estas unidades, como "kilovatios" o "gigabytes", por razones de simplicidad, aunque los chips de memoria individuales se especifican en términos de bits. Por ejemplo, un módulo de memoria de 1 gigabyte a menudo tiene 8 chips gigabit . Estos chips se leen al mismo tiempo, los datos resultantes se combinan para producir un solo byte de memoria.

Según la definición inestable de ese artículo, esto significa que una CPU de 16 bits solo puede direccionar 64 KB de memoria, lo cual es incorrecto. Los sistemas DOS de la década de 1980 utilizaron dos punteros para representar la memoria, un segmento y un < em> offset , y podría direccionar 16MB usando un puntero efectivo de 24 bits. Esta no es la única forma en que el tamaño del puntero sin formato y la memoria total direccionable pueden diferir.

Algunos sistemas de 32 bits también tenían un modelo de memoria de 36 bits alternativo que permitía abordar a 64 GB de memoria, aunque un proceso individual se limitó a una porción de 4 GB de la memoria disponible.

En otras palabras, para sistemas con un puntero singular a una dirección de memoria y donde la unidad de memoria más pequeña es un byte luego , la memoria máxima direccionable es 2 N bytes.

Afortunadamente, dado que los sistemas de 64 bits ahora son comunes y una computadora con> 64 GB de memoria ni siquiera es exótica o inusual, los sistemas de direccionamiento son mucho más simples ahora que cuando se trata de evitar las limitaciones de tamaño del puntero.

3
tadman 15 jun. 2020 a las 23:36

Debido a que la memoria es direccionable por bytes (es decir, cada byte tiene su propia dirección).

3
Scott Hunter 15 jun. 2020 a las 21:59