Можно ли расширить буфер разрыва без копирования данных? - PullRequest
0 голосов
/ 15 февраля 2019

Я читал этот обзор некоторых возможных структур данных для хранения последовательности символов для целей текстового редактора.Одним из популярных и эффективных способов является буфер с пропуском .

Когда буфер с пропуском заполняется так, что пропуска больше нет, данные необходимо будет скопировать в начало и конецбольший буфер, чтобы воссоздать пробел для дальнейшей вставки.Однако на странице 9 обзора говорится, что

с некоторой помощью операционной системы мы можем увеличить разрыв без фактического перемещения каких-либо данных.

IЯ не смог найти способ сделать это, поэтому мне интересно, если это действительно возможно.И если да, то как это можно сделать и в каких случаях.Или я неправильно понимаю, что имел в виду автор?

1 Ответ

0 голосов
/ 15 февраля 2019

В Linux вы можете использовать, например, mremap () для перемещения данных в виртуальном адресном пространстве.

Что касается Windows, вам следует использовать комбинацию AllocateUserPhysicalPages () , MapUserPhysicalPages () , VirtualAlloc () и около того.

Вся идея заключается в том, что вместо копирования данных вы изменяете физический способ и местопамять (с данными) появляется в адресном пространстве.Если вы не знакомы со связанными понятиями, прочитайте перевод страниц и таблицы страниц.

Обновление: Строго говоря, вы все равно можете в конечном итоге скопировать данные до размера страницы, когда пропасть исчезнет иПоложение курсора находится рядом с началом страницы памяти.Но это должно быть едва заметно в современных системах.Вы все еще не копируете данные на всех других страницах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...