web-dev-qa-db-fra.com

Comment calculer la taille de la mémoire en fonction d'une plage d'adresses?

J'ai un exercice que je ne pouvais pas résoudre, j'ai 3 plages de mémoire:

      First @      Last @ 

plage 1: FD00 0000 à FDFF FFFF

plage 2: D000 0000 à DFFF FFFF

gamme3: FA00 0000 à FBFF FFFF

la question est: donner la taille de la mémoire pour chaque plage (méga octet)?

ce que je sais, c'est que je devrais calculer la taille de la plage = dernière adresse - première adresse. Le résultat pour la première plage est donc: 00FF FFFF. Est-ce correct? alors que dois-je faire? J'ai cherché sur internet je n'ai pas trouvé d'exemple

S'il vous plaît aider

6
Julie

Dans votre exemple pour la gamme 1, vous avez raison. C'est la taille de la mémoire, exprimée en hexadécimal, en octets.

Vous pouvez obtenir le plus d'informations en convertissant d'abord 00FF FFFF en nombre décimal, puis en convertissant ce nombre d'octets en mégaoctets.

Pour convertir des octets en mégaoctets, utilisez la relation

1 MB = 1 Megabyte = 1024 * 1 KB = 1,048,576 bytes.

Il existe des tonnes de convertisseurs Hex en décimal en ligne. La calculatrice intégrée à Windows peut également effectuer la conversion.

Pour les autres plages, vous souhaitez à nouveau effectuer une soustraction pour déterminer la taille de la plage, puis appliquer les étapes ci-dessus, par exemple,.

 FBFF FFFF
-
 FA00 0000
 ---------
 01FF FFFF

Après avoir suivi ces étapes pour mieux comprendre ce qui se passe, la relation suivante vous permettra de répondre plus rapidement à ces questions:

0010 0000 = 1,048,576

Donc, 1 Mo est identique à 0010 0000 (parfois appelé 0x100000).

3
Eric J.

Désolé, pour répondre à une question avec une autre question/s ...

Le nombre d'adresses disponibles dans une plage donnée ne comprend-il pas également ces limites? Par exemple. (en décimal pour illustrer mon propos) avec une adresse de début 5 et une adresse de fin 10. Avec la soustraction uniquement, c'est-à-dire l'adresse de fin moins l'adresse de début (10-5), nous obtenons une plage de 5. Mais il y a en fait, six adresses uniques dans la plage, soit 5,6,7,8,9,10 (nous devrions donc ajouter 1 au résultat de la soustraction dans la question initiale de Julie?)

En outre, taille de l'adresse mémoire versus taille réelle de la mémoire . Parlons-nous du nombre d'emplacements de mémoire individuels ou de la taille de la mémoire disponible pour stocker des données (ce qui devrait prendre en compte la taille de chaque emplacement)?

Si ce ne sont que des emplacements de mémoire, nous avons presque terminé (je pense que cela est appelé taille d'adresse de mémoire). Il suffit de régler la partie relative à la question du MB (j'y reviendrai à la fin)

Si c'est l'espace de stockage disponible, cela devrait inclure la taille de chaque partie adressable de la mémoire, par ex. chaque adresse contient un bloc de données de taille inconnue. Dites si c'est un octet (1B) de données par emplacement mémoire que mon exemple ci-dessus signifie que la taille de la mémoire est: 6 (emplacements mémoire) multiplié par 1 Octet (volume de chaque emplacement mémoire) pour une taille totale de la mémoire de 6B

Donc, selon ma logique, la réponse à la question initiale pour Range 1 devrait être 01000000hex (range1 = FDFF FFFF-FD00 0000 + 1 = 01000000h ).

En ce qui concerne la taille de la mémoire de cette plage, c’est là que je suis vraiment confus .... Il s’agit d’un nombre spécifique d’emplacements mémoire, c’est-à-dire 1000000h, d’une taille indéterminée pour chaque emplacement. Alors, pourquoi l'exprimer en Mo ou en Go? Si vous connaissez la taille de chaque emplacement de mémoire (et multipliez le nombre d'emplacements par la taille de chaque emplacement, vous disposez alors de la taille de la mémoire pour cette plage et pouvez l'exprimer sous forme numérique.

Et pendant que nous y sommes, l'utilisation de MB, Go, etc. me laisse vraiment perplexe. Il est souvent cité comme chaque préfixe équivaut à un multiple de 1024, par exemple. 1 Ko = 1024 octets, 1 Mo = 1024 Ko etc., mais la convention préférée IEC est basée sur la norme ISO (selon mon googling tout à l'heure) qui indique Kilo (Ko) = 1000, Mega (MB) = 1000000 etc. 

Donc, en mettant de côté la taille inconnue de chaque emplacement et en convertissant 1000000h en nombre décimal, c’est-à-dire 16 777 216, la réponse est soit: 

  • 16MB (16777216/1024/1024 = 16) JE SOUVIVE CE IS LA RÉPONSE DE L'ENSEIGNANT IS APRÈS
  • 16,777216MB (selon les normes ISO)
  • 16 mégaoctets (selon la norme commune CEI/ISO - IEC 80000-13)

Au fait, googler vient juste de m'instruire (peut-être sous-entendu récemment et partiellement) sur les kibibytes et les mebibytes ... si cela vous intéresse, consultez https://en.wikipedia.org/wiki/Kilobyte

l'équation est 

second_add - first_add + 1

exemple 

fdff ffff - fd00 0000 + 1 = 0100 0000 = 2^24 = 2^4 * 2^20 = 16Mbyte [2^20 byte = 1 Mbyte] 
1
user7606761

Pour vous faciliter la compréhension, je change simplement la question comme suit: quelle est la taille de la mémoire d’une plage de 2 à 9 ?.

La réponse est 8 comme suit 2, 3, 4, 5, 6, 7, 8, 9. La formule est la plus haute adresse - la plus basse adresse + 1.

Pour votre premier problème, plage 1: FD00 0000 à FDFF FFFF, la réponse est 00FF FFFF + 1 = 0100 0000H = 1 X 16 ^ 6 = 1 X (2 ^ 4) ^ 6 = 2 ^ 24 = 2 ^ 4 x 2 ^ 20 . Pour dans le système binaire 2 ^ 10 = 1024 = 1K et 2 ^ 20 = 1K x 1 K = 1M puis 2 ^ 4 x 2 ^ 20 = 16 M. Pour le deuxième et le troisième problème, veuillez faire de même. Bonne chance.

0
Dahlan Sitompul
range1: FD00 0000 to FDFF FFFF:
  FD FF FFFF 
- FD 00 0000
------------
  FF FFFF = 1MB (0x100 0000)

range2 : D000 0000 to DFFF FFFF = 256MB (0x1000 0000)

range3 : FA00 0000 to FBFF FFFF = 32MB (0x200 0000)
0
ashish