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

Содержимое удалено Содержимое добавлено
Строка 480:
Следовательно, alloc_size является наибольшим размеров из указанных выше, округленный, чтобы бы быть кратным всех трем размерам. Это гарантирует выравнивание при условии, что выравнивание является степеньь двух: что выполняется на всех известных платформах.
 
==== AВзгляд Lookна atблок the Memory Blockпамяти ====
Каждый блок памяти состоит из трех основных частей. Из первой части собственно выделяется память Первая часть является и она содержит вложенный список свободных блоков. Вторая часть является указателем на следующий блок и третья часть это размер следующего блока.
Each memory block consists of three main sections. The first section is the part that chunks are cut out of, and contains the interleaved free list. The second section is the pointer to the next block, and the third section is the size of the next block.
 
EachКаждая ofиз theseэтих sectionsчастей mayможет containсодержать paddingзаполнение asдля necessaryгарантирования toправильного guaranteeвыравнивания alignmentкаждой forиз eachэтих of the next sectionsчастей. The size of theРазмер firstпервой sectionчасти isравен number_of_chunks * lcm(requested_size, sizeof(void *), sizeof(size_type)); theразмер sizeвторой ofчасти the second section isравен lcm(sizeof(void *), sizeof(size_type); and the size ofи theразмер thirdтретьей sectionчасти isравен sizeof(size_type).
 
Here'sПример anблока example memory blockпамяти, whereгде requested_size == sizeof(void *) == sizeof(size_type) == 4:
 
 
 
ToЧтобы showпоказать aпример visualвозможного example of possible paddingвыравнивания, here'sприведем anпример exampleблока memory blockпамяти, whereгде requested_size == 8 andи sizeof(void *) == sizeof(size_type) == 4'''Полужирное начертание'''
 
==== next ====