Пул строк

Поделись знанием:
Перейти к: навигация, поиск

Пул строк (англ. string pooling) относится к двум видам оптимизации компилятора, связанным со строками:

  1. Снижение объёма кода путём объединения одинаковых строк из разных модулей.
  2. Ленивые присваивания строк с использованием счётчика ссылок (copy-on-write).




Объединение строк из разных модулей

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

Чтобы не допустить роста объёма кода, многие компиляторы (в том числе компилятор C#) хранят литеральную строку в метаданных модуля только в одном экземпляре. Все упоминания этой строки в исходном коде компилятор заменяет ссылками на её экземпляр в метаданных. Благодаря этому заметно уменьшается размер модуля. Способ не нов — в компиляторах C/C++ этот механизм существует уже давно. В компиляторе Microsoft C/C++ это называется созданием пула строк (string pooling). Это ещё одно средство, позволяющее ускорить обработку строк.

Ленивые присваивания строк

Обычно строка — это объект большого размера, требующий для своей работы выделения большого блока памяти. Данная оптимизация выделяет память под строки только при надобности, позволяя нескольким переменным указывать на одну цепочку символов. Только если одна из переменных меняет своё содержимое, строка копируется.

Подобная оптимизация существует в языках со сборкой мусора в таком виде: строка является неизменным объектом, и присваивание a=b не создаёт новой строки. Недостаток этого решения в том, что программист должен знать и использовать внутренний механизм построения строк наподобие StringBuilder (Java).

Напишите отзыв о статье "Пул строк"

Литература

  • Рихтер Дж. CLR via C#. Программирование на платформе Microsoft .NET Framework 2.0 на языке C#. Мастер-класс.

Ссылки

  • [habrahabr.ru/post/79913/ Все о String.intern() : ] для чего пул строк используется в Java

Отрывок, характеризующий Пул строк


Х
Войска французские равномерно таяли в математически правильной прогрессии. И тот переход через Березину, про который так много было писано, была только одна из промежуточных ступеней уничтожения французской армии, а вовсе не решительный эпизод кампании. Ежели про Березину так много писали и пишут, то со стороны французов это произошло только потому, что на Березинском прорванном мосту бедствия, претерпеваемые французской армией прежде равномерно, здесь вдруг сгруппировались в один момент и в одно трагическое зрелище, которое у всех осталось в памяти. Со стороны же русских так много говорили и писали про Березину только потому, что вдали от театра войны, в Петербурге, был составлен план (Пфулем же) поимки в стратегическую западню Наполеона на реке Березине. Все уверились, что все будет на деле точно так, как в плане, и потому настаивали на том, что именно Березинская переправа погубила французов. В сущности же, результаты Березинской переправы были гораздо менее гибельны для французов потерей орудий и пленных, чем Красное, как то показывают цифры.
Единственное значение Березинской переправы заключается в том, что эта переправа очевидно и несомненно доказала ложность всех планов отрезыванья и справедливость единственно возможного, требуемого и Кутузовым и всеми войсками (массой) образа действий, – только следования за неприятелем. Толпа французов бежала с постоянно усиливающейся силой быстроты, со всею энергией, направленной на достижение цели. Она бежала, как раненый зверь, и нельзя ей было стать на дороге. Это доказало не столько устройство переправы, сколько движение на мостах. Когда мосты были прорваны, безоружные солдаты, московские жители, женщины с детьми, бывшие в обозе французов, – все под влиянием силы инерции не сдавалось, а бежало вперед в лодки, в мерзлую воду.
Стремление это было разумно. Положение и бегущих и преследующих было одинаково дурно. Оставаясь со своими, каждый в бедствии надеялся на помощь товарища, на определенное, занимаемое им место между своими. Отдавшись же русским, он был в том же положении бедствия, но становился на низшую ступень в разделе удовлетворения потребностей жизни. Французам не нужно было иметь верных сведений о том, что половина пленных, с которыми не знали, что делать, несмотря на все желание русских спасти их, – гибли от холода и голода; они чувствовали, что это не могло быть иначе. Самые жалостливые русские начальники и охотники до французов, французы в русской службе не могли ничего сделать для пленных. Французов губило бедствие, в котором находилось русское войско. Нельзя было отнять хлеб и платье у голодных, нужных солдат, чтобы отдать не вредным, не ненавидимым, не виноватым, но просто ненужным французам. Некоторые и делали это; но это было только исключение.