Указатель крутится
Эта статья включает список литературы , связанную литературу или внешние ссылки , но ее источники остаются неясными, поскольку в ней отсутствуют встроенные цитаты . ( Май 2011 г. ) |
В информатике перемещение указателя — это преобразование ссылок на основе имени или позиции в прямые на указатели ссылки ( адреса памяти ). Обычно это выполняется во время десериализации или загрузки перемещаемого объекта из дискового файла, например исполняемого файла на основе указателя или структуры данных .
Обратная операция замены указателей памяти на независимые от позиции символы или позиции иногда называется unswizzling и выполняется во время сериализации (сохранения). В качестве альтернативы обе операции также можно назвать перелистыванием.
Пример
[ редактировать ]Легко создать структуру данных связанного списка, используя такие элементы:
struct node {
int data;
struct node *next;
};
Но сохранение списка в файл и последующая его перезагрузка (в большинстве операционных систем) приведет к поломке каждой ссылки и сделает список бесполезным, поскольку узлы почти никогда не будут загружены в одни и те же области памяти. Один из способов полезного сохранения и извлечения списка — присвоить каждому узлу уникальный идентификационный номер, а затем отключить указатели, превратив их в поле, указывающее идентификационный номер следующего узла:
struct node_saved {
int data;
int id_number;
int id_number_of_next_node;
};
Подобные записи можно сохранять в файл в любом порядке и перезагружать, не разрывая список. Другие варианты включают сохранение смещения файла следующего узла или числа, указывающего его позицию в последовательности сохраненных записей, или просто сохранение узлов в файле по порядку.
После загрузки такого списка поиск узла по его номеру затруднителен и неэффективен (последовательный поиск). Обход списка был очень быстрым с оригинальными указателями «Далее». Чтобы преобразовать список обратно в исходную форму или перевернуть указатели, необходимо найти адрес каждого узла и превратить поля id_number_of_next_node обратно в прямые указатели на правильный узел.
Методы раскрутки
[ редактировать ]Существует потенциально неограниченное количество форм, в которых можно развернуть указатель, но некоторые из наиболее популярных включают в себя:
- Смещение указанного объекта в файле
- Индекс объекта, на который указывает указание, в некоторой последовательности записей.
- человека Уникальный идентификатор, которым обладает объект, на который указывает, например номер социального страхования ; в базах данных таким образом отключаются все указатели (см. Внешний ключ ).
Способы свизлинга
[ редактировать ]Свиззлинг в общем случае может быть сложным. Эталонный граф указателей может содержать произвольное количество циклов ; это усложняет поддержание сопоставления старых необработанных значений с новыми адресами. Ассоциативные массивы полезны для поддержания отображения, а такие алгоритмы, как поиск в ширину, помогают перемещаться по графу, хотя оба они требуют дополнительного хранилища. Различные сериализации библиотеки предоставляют общие потрясающие системы. Однако во многих случаях переключение можно выполнить с использованием упрощающих предположений, таких как древовидная или списковая структура ссылок.
Различают следующие виды свизлинга:
- Автоматическое вращение
- Кручение по требованию
Потенциальные слабости безопасности
[ редактировать ]В целях безопасности unswizzling и swizzling должны выполняться с большой осторожностью. В частности, представление злоумышленником специально созданного файла может позволить получить доступ к адресам за пределами ожидаемых и надлежащих границ. В системах со слабой защитой памяти это может привести к раскрытию конфиденциальных данных или изменению кода, который может быть выполнен. Если в системе не реализованы меры защиты от выполнения данных, система может быть серьезно скомпрометирована установкой различных видов вредоносного ПО .
Методы защиты включают проверки перед отправкой данных в приложение:
- Каждое смещение находится в пределах считанных данных.
- Таблица индексов и записи, на которые указывают, имеют аналогичные ограничения.
- Эти идентификаторы уникальны и, если они конфиденциальны, зашифрованы.
- Все данные переменной длины ограничены длиной, не превышающей фактическое распределение.
- Эти ассигнования имеют разумный размер.
- Выделенные выделения, которые не загружены считанными данными, очищаются или загружаются по определенному шаблону.
См. также
[ редактировать ]- Перемещение , быстрая форма модификации указателя.
Ссылки
[ редактировать ]Дальнейшее чтение
[ редактировать ]- Уилсон, Пол Р. (1 июля 1991 г.) [июнь 1991 г.]. «Перемещение указателя во время ошибки страницы: эффективная поддержка огромных адресных пространств на стандартном оборудовании». Новости компьютерной архитектуры ACM SIGARCH . Том. 19, нет. 4. стр. 6–13. дои : 10.1145/122576.122577 .
- Кемпер, Альфонс; Коссманн, Дональд (июль 1995 г.). «Стратегии адаптивного перемещения указателей в объектных базах: проектирование, реализация и количественный анализ» (PDF) . Международный журнал по очень большим базам данных . 4 (3): 519–567. дои : 10.1007/BF01231646 . S2CID 4556203 . Архивировано (PDF) из оригинала 25 июля 2008 г. Проверено 8 декабря 2021 г. (49 страниц)
- Кроуфорд, Дерек (июнь 1992 г.). Азбука C Дерека . Том. 2. С. 340–343.