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

Содержимое удалено Содержимое добавлено
/* Утверждение 2: Любой блок памяти, выделенный как массив символов с помощью оператора new[] (здесь и далее - блок), имеет правильное выравн…
Строка 452:
(Конкретнее, типы массивов являются объектными типами)
 
Заключение 2: Для любого указателя p и целого i, если p правильно выравнен в соответствии с типом, на который он указывает, то p + i (whenпри четком определении (well-defined)) также правильно выравнено для этого типа; другими словами, если массив имеет правильное выравнивание, то каждый элемент в этом массиве имеет правильное выравнивание
 
Нет цитат из Стандарта прямо подтверждающих данное утверждение, но это соответствует общей концепции понятия "выравнивание".
 
Обратите внимание, что условие для p + i быть четко определенным (be well-defined) обрисовано(are outlined) в [5.7/5]. Мы не цитируем это здесь, а только обращаем внимание на то, что (p + i) является well-definedчетко определенным если 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 является well-definedчетко определенным, тогда для каждого n, существует целое jn такое что pn + jn является well-definedчетко определенным и ссылается на тот же адрес памяти что и pe + i
 
Это естественно, поскольку блок памяти это массив из Element, и для каждого n, sizeof(Element) % sizeof(Tn) == 0; таким образом, граница каждого элемента массива из Elements также является границей каждого элемента в каждом массиве из Tn.
This follows naturally, since the memory block is an array of Elements, and for each n, sizeof(Element) % sizeof(Tn) == 0; thus, the boundary of each element in the array of Elements is also a boundary of each element in each array of Tn.
 
Теорема: Для каждого целого i, такого что pe + i является четко определенным, адрес (pe + i) является правильно выравненным для каждого типа Tn
Theorem: For each integer i, such that pe + i is well-defined, that address (pe + i) is properly aligned for each type Tn
 
Так как pe + i четко определено, тогда в соответствии с Заключением 3, pn + jn также четко определено и имеет правильно выравнивание в соответствии с Утверждением 2 и Заключениями 1 and 2.
Since pe + i is well-defined, then by Corollary 3, pn + jn is well-defined. It is properly aligned from Predicate 2 and Corollaries 1 and 2.
 
==== next ====