Да здравствует сравнение технических характеристик в наиболее благоприятных условиях.Сообщение от Vitamin
ОК.Сообщение от Vitamin
Предположим, что размер указателя будет 16 бит. Используется модель, в которой указатель - это хэндл блока памяти на куче. Таким образом, максимум 64K блоков на куче на всю систему.
Будет системный вызов РАЗЫМЕНОВАТЬ УКАЗАТЕЛЬ, в который передаётся указатель, результат - устанавливается нужная страница и возвращается адрес блока внутри неё. Теперь блок можно адресовать напрямую. Кроме того, имеет смысл сделать вызов КОПИРОВАНИЕ из блока, указываемого одним указателем, в блок указываемый другим указателем того же типа. Это копирование может происходить из одной страницы в другую. Это нужно, чтобы сделать операции копирования явными.
Видимо, имеется ввиду внутренняя фрагментация. Разумеется, с этим можно бороться, если разделять блоки по разным страницам, а при разыменовании склеивать в непрерывный блок. Однако, здесь понадобится "прозрачное" копирование, к которому я скептически отношусь. Поэтому - пока никак не собираюсь бороться. Буду рекомендовать делать размеры блоков "как можно более кратными степени двойки".Сообщение от Vitamin
Всё равно бесполезное занятие. Лучше даже и не пробовать. Неплохое решение - использование сильно типизированного языка высокого уровня.Сообщение от Vitamin
Общую память - очень просто: одна программа даёт второй программе указатель, который тут же можно использовать по назначению. Если неизвестно, какая программа завершится раньше, а какая позже - тут и развернётся сборщик мусора во всей красе.Сообщение от Vitamin
COW для блоков памяти на куче? Забавно.
Но также вполне возможно. Конечно же понадобятся вызовы вроде "разыменовать для записи", "разыменовать для чтения", "разыменовать для чтения\записи" и т. п.