Как рассчитать размер памяти по заданному диапазону адресов?
У меня есть упражнение, которое я не мог решить, У меня есть 3 диапазона памяти :
First @ Last @
range1: FD00 0000 to FDFF ffff
range2 : D000 0000 to DFFF ffff
range3: FA00 0000 к FBFF ffff
вопрос :дайте размер памяти для каждого диапазона (Мега байт)?
Я знаю, что я должен рассчитать площадь круга = "Последний адрес" - первый адрес таким образом, результат для первого диапазона : 00FF FFFF . Заключаться в следующем правильно? тогда что мне делать? Я искал в Интернете я не нашел пример
пожалуйста, помогите
6 ответов
в вашем примере для диапазона 1, Вы правы. Это размер памяти, указанный в шестнадцатеричном формате, в байтах.
вы можете получить наибольшее представление, сначала преобразовав 00FF FFFF в десятичное число, а затем преобразовав это количество байтов в мегабайты.
для преобразования из байтов в мегабайты использовать отношения
1 MB = 1 Megabyte = 1024 * 1 KB = 1,048,576 bytes.
есть тонны онлайн шестнадцатеричных и десятичных преобразователей. Калькулятор, встроенный в Windows, также может сделать преобразование.
для других диапазонов, вы снова хотите сделать вычитание, чтобы определить размер диапазона, а затем применять указанные выше действия, например,
FBFF FFFF
-
FA00 0000
---------
01FF FFFF
пройдя через эти шаги, чтобы лучше понять, что происходит, следующие отношения позволят вам быстрее ответить на такие вопросы:
0010 0000 = 1,048,576
таким образом, 1 МБ совпадает с 0010 0000 (иногда называемый 0x100000).
извините, чтобы ответить на вопрос с другим вопросом / s...
разве количество адресов, доступных в пределах заявленного диапазона, не включает эти ограничители диапазона? например (в десятичном, чтобы проиллюстрировать мою точку) с начальным адресом 5 и конечным адресом 10. С вычитанием только т. е. конечный адрес минус начальный адрес (10-5) мы получаем диапазон 5. Но на самом деле есть шесть уникальных адресов в диапазоне, т. е. 5,6,7,8,9,10 (поэтому мы должны добавить 1 к результату вычитание в первоначальном вопросе Джули?)
и размер адреса памяти и фактический размер памяти. Мы говорим о количестве отдельных ячеек памяти или о размере памяти, доступной для хранения данных (который должен учитывать размер каждого местоположения)?
Если это просто места памяти, то мы почти закончили (я думаю, что это называется размером адреса памяти). Просто нужно решить часть MB вопроса (Я вернусь к этому вопросу в конце)
Если это доступное пространство для хранения, это должно включать размер каждой адресуемой части памяти, например, каждое адресное местоположение содержит неизвестный размер куска данных. Скажем, если это 1 байт (1B) данных на место памяти, чем мой пример выше, означает, что размер памяти: 6 (места памяти), умноженные на 1 байт (объем каждого места памяти) для общего размера памяти 6B
Итак, основываясь на моей логике,ответ в оригинальной вопрос для диапазона 1 должно быть 01000000hex (range1 = FDFF FFFF-FD00 0000 + 1 = 01000000h).
Что касается размера памяти этого диапазона, вот где я действительно запутался.... Это определенное количество ячеек памяти, т. е. 1000000h, некоторого неопределенного размера для каждого местоположения. Так зачем выражать его в MB или GB. Если вы знаете размер каждого местоположения памяти (и умножаете количество местоположений на размер каждого местоположения, то у вас есть размер памяти для этого диапазон и может выражать его в числовой форме.
и пока мы на нем, где я действительно очень запутался, это использование MB, GB и т. д. Часто цитируется, поскольку каждый префикс равен кратному 1024, например 1KB = 1024Bytes, 1MB = 1024kB и т. д., Но предпочтительное соглашение IEC основано на стандарте ISO (согласно моему googling только что), Который говорит Kilo (kB) = 1000, Mega (MB) = 1000000 и т. д.
таким образом, откладывая неизвестный размер каждого местоположения в сторону и преобразуя 1000000h в десятичной, т. е. 16,777,216 ответ:
- 16 МБ (16777216/1024/1024=16) Я ПОДОЗРЕВАЮ, ЧТО ЭТО ОТВЕТ УЧИТЕЛЬ ПОСЛЕ
- 16.777216 МБ (согласно стандартам ИСО)
- 16 мебибайт (согласно совместному стандарту IEC/ISO - IEC 80000-13)
кстати, Googling только что обучил меня (может быть принято за последнее время и частично) на кибибайтах и мебибайтах...если вам интересно, проверьтеhttps://en.wikipedia.org/wiki/Kilobyte
уравнение
second_add - first_add + 1
пример
fdff ffff - fd00 0000 + 1 = 0100 0000 = 2^24 = 2^4 * 2^20 = 16Mbyte [2^20 byte = 1 Mbyte]
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)
чтобы вам было легко понять, я просто меняю вопрос следующим образом: каков размер памяти диапазона 2-9?.
ответ 8 следующим образом 2, 3, 4, 5, 6, 7, 8, 9. Формула самый высокий адрес-самый низкий адрес + 1.
для вашей первой проблемы range1: FD00 0000 к FDFF FFFF, ответ 00FF FFFF+1=0100 0000H=1 X 16^6= 1 X (2^4)^6=2^24=2^4 x 2^20. Для двоичной системы 2^10= 1024=1K и 2^20=1K x 1 K = 1M тогда 2^4 x 2^20=16 M. Для вторая и третья проблема, пожалуйста, сделайте то же самое. Удача.
Я думаю, что формула
size = end-begin
всегда в порядке использовать (без разницы от других размеров, т. е. талии для брюк)
размер памяти делает его немного сложнее из-за HEX и DEC, в которых decimal легко читается человеком, и часто используется B(байты).
чтобы упростить работу, если у вас установлен bc, вы можете попробовать
echo 'ibase=16;yourendhex-yourbeginhex' | bc
в вашем случае
echo 'ibase=16;FDFFFFFF-FD000000' | bc
echo 'ibase=16;DFFFFFFF-D0000000' | bc
echo 'ibase=16;FBFFFFFF-FA000000' | bc
16777215 #16MB
268435455 #268MB
33554431 #34MB