Boost.Pool: различия между версиями
Содержимое удалено Содержимое добавлено
/* Утверждение 2: Любой блок памяти, выделенный как массив символов с помощью оператора new[] (здесь и далее - блок), имеет правильное выравн… |
|||
Строка 452:
(Конкретнее, типы массивов являются объектными типами)
Заключение 2: Для любого указателя p и целого i, если p правильно выравнен в соответствии с типом, на который он указывает, то p + i (
Нет цитат из Стандарта прямо подтверждающих данное утверждение, но это соответствует общей концепции понятия "выравнивание".
Обратите внимание, что условие для p + i быть четко определенным (be well-defined) обрисовано(are outlined) в [5.7/5]. Мы не цитируем это здесь, а только обращаем внимание на то, что (p + i) является
Пусть: sizeof(Element) является наименьшим общим множителем размеров нескольких реальных объектов (T1, T2, T3, ...)
Строка 462:
Пусть: блок будет указателем на блок памяти, pe будет(Element *) блоком, и pn будет (Tn *) блок
Заключение 3: Для каждого целого i, такого что 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.
==== next ====
|