Как и в заголовке, что такое смежный блок памяти?Что такое непрерывный блок памяти?
ответ
Один без пробелов в адресах, которые он занимает. Вероятно, вы можете просто подумать об этом как о «блоке» и подумать о чем-то, имеющем промежуток посередине, как «два блока».
Термин возникает в определении массива как «смежном». Это означает, что элементы выложены из конца в конец, без разрывов и без прокладки между ними (внутри каждого элемента может быть прокладка, но не между элементами). Таким образом, массив из 5 элементов 4-байтовых выглядит следующим образом (1 символ подчеркивания в байт, то | символы не представляют памяти):
____ ____ ____ ____ ____
|____|____|____|____|____|
Это не выглядит так:
____ _ ____ _ ____ _ ____ _ ____
|____|_|____|_|____|_|____|_|____|
И ни это выглядит следующим образом:
____ ____ ____ ____ ____
|____|____|____| ... somewhere completely different ... |____|____|
во всех случаях, «выглядит как» означает «насколько адрес, видимый в C обеспокоены». Что-то может быть смежным в виртуальном адресном пространстве, но не смежным в физической ОЗУ. В этом случае что-то может быть смежным в адресном пространстве физического RAM, но фактически не смежным в физической ОЗУ. Половина из них может быть на одном чипе RAM здесь, а другая половина на другом чипе RAM там. Но модель памяти C не может «видеть» все это.
Блок памяти, который не прерывается другой памятью. Точнее, для этого требуется непрерывный блок виртуального адресного пространства. Реальная ОЗУ, поддерживающая это адресное пространство, не должна быть непрерывной.
Это важно, если вы выделяете большой блок памяти. ОС должна предоставить его вам как непрерывный блок, но если память настолько фрагментирована, что только меньшие части свободны, то это распределение памяти не может быть выполнено, даже если общая свободная память больше запрашиваемого пространства.
Это не такая большая проблема для 64-разрядных приложений, так как там большое пространство адресов. Но в 32-битных процессах может случиться так, что куча становится настолько фрагментированной (между освобожденными блоками есть все еще разблокированные блоки), что большие распределения терпят неудачу.
Ответ в контексте выделения памяти, когда вы вызываете распределитель памяти и запрашиваете 24 байта памяти, он должен иметь возможность находить один блок не менее 24 байтов нераспределенной памяти.
Если он имеет 16 байт памяти, начиная с одного адреса x
и еще 8 байтов, начиная с адреса y
таким образом, что y > x + 16
или y < x - 8
(что бы создать разрыв), то Распределитель не может удовлетворить ваш запрос на 24 байта, даже если в общей сложности 24 байта.
См. Также Fragmentation.
Блок памяти является непрерывным, когда он определяется начальным и конечным адресами из одного линейного адресного пространства и не имеет отверстий.
Это непрерывный блок памяти из пяти байт, охватывающее от местоположения 1 к местоположению 5:
Это представляет байты (в светло-голубом), которые вместе в памяти без просветов байт (белого) между ними.
Это несмежный набор из пяти байт, представляющих интереса:
Она раздроблена на три группы байт (желтых), начиная с позицией 1 с зазором байты присутствуют между группами. Байты пробела находятся в точках 4 и 6.
+1 для ярких иллюстраций :) – Michael
- 1. Выделите непрерывный блок памяти
- 2. Что такое именованный блок памяти
- 3. Что такое непрерывный массив?
- 4. Что такое непрерывный процесс?
- 5. ли malloc() выделяет непрерывный блок памяти?
- 6. 2D-массив как непрерывный блок памяти
- 7. Что такое блок инициализации?
- 8. Что такое блок JSF?
- 9. Что такое «блок управления»
- 10. Как увеличить максимальный непрерывный блок памяти в кучке большого объекта
- 11. Неттипированный непрерывный контейнер памяти
- 12. Что такое блок в Yii2
- 13. Что такое блокировка памяти?
- 14. Что такое фрагментация памяти?
- 15. Непрерывный запуск программы, утечка памяти
- 16. Что такое ошибка страницы памяти?
- 17. Что такое куча памяти tomcat?
- 18. Что такое выделенное распределение памяти?
- 19. Что такое команда «История памяти»?
- 20. pyparsing определение слова как непрерывный блок символов
- 21. Что такое утечки памяти в C?
- 22. Что такое блок-блок ibm bluemix для событий?
- 23. Что такое сканирование: {} блок в Java?
- 24. Что такое блок PrintOptions.PageContentHeight в CrystalDecisions.CrystalReports.Engine
- 25. Что такое содержащий блок плавающих элементов?
- 26. Что такое move_iterator для
- 27. Смежный блок памяти с malloc
- 28. Очень большой массив (непрерывный кусок памяти)
- 29. Что такое байт [] в C#?
- 30. Непрерывный кроссфейд изображений и из памяти
+1 Хорошая фигура. –
@ Синан: Спасибо, я работаю. –
+1 для этого ответа, классический. –