2011-02-08 2 views

ответ

10

Слабый массив - это массив слабых указателей. Слабый указатель - это ссылка на значение, которое может быть собрано в мусор.

Если вы используете обычный указатель на значение, вы предотвратите его сбор мусора до тех пор, пока рефери сам не соберет мусор. При слабой ссылке значение может быть собрано перед судьей.

Примером использования является источник, который передает данные нескольким приемникам. Если источник имеет регулярные указатели на приемники, всякий раз, когда приемник больше не нужен, он не будет собирать мусор до тех пор, пока источник не будет (что, например, никогда не произойдет). Если источник использует слабые ссылки на приемники, данные приемники могут быть собраны мусором перед источником.

Другим примером является hashconsing для типа, который использует слабые hashtables (которые включают слабые массивы). Быстро, hashconsing - это способ запомнить все значения заданного типа, которые созданы и живут в программе. Вместе с соответствующим конструктором значений это может обеспечить максимальное разделение значений этого типа и позволяет реализовать структурное равенство в этом типе как физическое равенство. В этом случае, если используется не слабая хеш-таблица, значения, которые больше не используются программой, никогда не будут собираться мусором.

И, наконец, многие люди думают (ошибочно), что слабые ссылки полезны для реализации кешей. Храните слабую ссылку на значение, если это был сбор мусора, перезагрузите/пересчитайте значение. Это не хороший алгоритм кэширования, поскольку основная сборка мусора возвращает любое значение, на которое больше не ссылаются. Таким образом, ваш алгоритм кэширования не имеет предсказуемости или полезного свойства, например, размер кеша/доступной памяти не превышает заданного отношения.

+0

Очень хороший ответ, спасибо! – Yttrill

1

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

+0

Я не могу дать вам галочку, а Джеймс, хотя я бы хотел. См. Следующий .. – Yttrill

+0

Проблема в том, что это таблица символов для схемы OCS, очевидная вещь для сохранения - это s-выражение перед компиляцией. Проблема в том, что «save» является частью Dypgen, сохраняя автомат, и я не могу легко отключить скомпилированную схему с автомата. – Yttrill

+0

На самом деле я мог бы сделать это, просто назначив каждому действию Parser целое число, сохраните его и отдельно сохраните s-выражения до компиляции. Но тогда у меня есть проблема: как мне избежать перекомпиляции кода схемы каждый раз при сокращении производства? – Yttrill

Смежные вопросы