Boost.Pool: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 452:
(Конкретнее, типы массивов являются объектными типами)
 
Заключение 2: Для любого указателя p и целого i, если p правильно выравнен в соответствии с типом, на который он указывает, то p + i (при четкомправильном определении (well-defined)) также правильно выравнено для этого типа; другими словами, если массив имеет правильное выравнивание, то каждый элемент в этом массиве имеет правильное выравнивание
 
Нет цитат из Стандарта прямо подтверждающих данное утверждение, но это соответствует общей концепции понятия "выравнивание".
 
Обратите внимание, что условие для p + i быть четкоправильно определенным (be well-defined) обрисовано(are outlined)обозначено в [5.7/5]. Мы не цитируем это здесь, а только обращаем внимание на то, что (p + i) является четкоправильно определенным если p и p + i оба указывают в один и тот же массив или на следующий элемент за массивом(?) (both point into or one past the same array).
 
Пусть: sizeof(Element) является наименьшим общим множителем размеров нескольких реальных объектов (T1, T2, T3, ...)
Строка 462:
Пусть: блок будет указателем на блок памяти, pe будет(Element *) блоком, и pn будет (Tn *) блок
 
Заключение 3: Для каждого целого i, такого что pe + i является четкоправильно определенным, тогда для каждого n, существует целое jn такое что pn + jn является четкоправильно определенным и ссылается на тот же адрес памяти что и pe + i
 
Это естественно, поскольку блок памяти это массив из Element, и для каждого n, sizeof(Element) % sizeof(Tn) == 0; таким образом, граница каждого элемента массива из Elements также является границей каждого элемента в каждом массиве из Tn.
 
Теорема: Для каждого целого i, такого что pe + i является четкоправильно определенным, адрес (pe + i) является правильно выравненным для каждого типа Tn
 
Так как pe + i четкоправильно определено, тогда в соответствии с Заключением 3, pn + jn также четкоправильно определено и имеет правильно выравнивание в соответствии с Утверждением 2 и Заключениями 1 and 2.
 
==== Применение Теоремы ====