рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди
рд╕реНрдореГрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдереАрдВ:
- рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рджрд╕рд┐рдпреЛрдВ рдФрд░ рдХрд░реЛрдбрд╝реЛрдВ рдЫреЛрдЯреА-рдЫреЛрдЯреА рд╡рд╕реНрддреБрдУрдВ рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреА рд╣реИред
- рдСрдмреНрдЬреЗрдХреНрдЯ POD рдкреНрд░рдХрд╛рд░ рдереЗред
рдкреЙрдбC ++ рдореЗрдВ рдПрдХ рд╕рд╛рджрд╛ рдкреБрд░рд╛рдирд╛ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдПрдХ рд╕рдордЧреНрд░ рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ PODS рд╕рджрд╕реНрдп рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдкреЙрдЗрдВрдЯрд░-рдЯреВ-рдореЗрдВрдмрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреЛрдИ рднреА рдЧреИрд░-рд╕рджрд╕реНрдп рд╕рджрд╕реНрдп рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
- рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рдерд╛ рдХрд┐ рдХрд┐рддрдиреА рд╡рд╕реНрддреБрдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рд╕реМ рдпрд╛ рд╢рд╛рдпрдж рд╕реМ рдорд┐рд▓рд┐рдпрди рд▓рдЧреЗрдВрдЧреЗред
- рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдирд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рд╡реЗ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
- рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ (рдПрд╕) рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдереНрд░реЗрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрд╡рдВрдЯрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдорд╛рдирдХ рдирдП рдХрд╛ рдЙрдкрдпреЛрдЧ - рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╣рдЯрд╛рдиреЗ рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдХреА рдмрд╣реБрдд рдмрдбрд╝реА рд╣рд╛рдирд┐ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдбрд┐рдмрдЧрд░ рдХреЗ рдмрд┐рдирд╛, рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рд╕реЗрдХрдВрдб рдореЗрдВ рд╡рд┐рд▓реЛрдкрди рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдбрд┐рдмрдЧрд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдореЗрдореЛрд░реА рдбреАрдХреНрд▓реЛрдХреЗрд╢рди рд▓рдЧрднрдЧ 100 (!) рдЯрд╛рдЗрдореНрд╕ рддрдХ рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рдмрд╕ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЖрд╡рдВрдЯрд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХрд╛рд░рдг, рд╕реНрдореГрддрд┐ рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдбреЗрдЯрд╛ рдкрд░ рд╕реНрдореГрддрд┐ рдЕрдзрд┐рдХ рд╣реЛ рдЧрдИред
рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдЙрдирдХреЗ рдмреИрдЪ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд▓реЙрдХ-рдлреНрд░реА рдХрдВрдЯреЗрдирд░ MassAllocator рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреЛрдб рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2012 рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреВрд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб
github рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред
рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдореЗрдореЛрд░реА рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЫреЛрдЯреА рд╕реА рд╣реИрдХ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рд╕реВрдЪрдХ рдХреЗ рдмрдЬрд╛рдп, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЪрд╛рд░ рдмрд┐рд▓рд┐рдпрди рд╕реЗ рдХрдо рд╣реЛрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИ, рдЗрд╕рд▓рд┐рдП 64-рдмрд┐рдЯ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдмрдЬрд╛рдп 32-рдмрд┐рдЯ рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ 4 рдмрд╛рдЗрдЯреНрд╕ рдмрдЪрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рдХреЛ рд▓рдЧрднрдЧ 12% рдХрдо рдХрд░ рдкрд╛рдпрд╛ред
рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдмреЛрдирд╕ рдирд┐рдХрд▓рд╛ рдХрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдБ рдЖрд╕рд╛рдиреА рд╕реЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП std :: рд╕реЙрд░реНрдЯред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдмреНрд▓реЙрдХ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХрд╛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЪрдпрди рдХрд░рдирд╛ рд╣реИред рдорд╛рдирдХ рдореЙрд▓реЙрдХ рд╕реНрдореГрддрд┐ рдХреЗ рдПрдХ рдмреНрд▓реЙрдХ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд┐рд╕реА рддрддреНрд╡ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реВрдЪрдХ рд╕рд░рдгреА рдХреЗ рдЕрдЧрд▓реЗ рддрддреНрд╡ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЪрдпрдирд┐рдд рддрддреНрд╡реЛрдВ рдХреЗ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рд╕рд░рдгреА рд╕реЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореЗрдореЛрд░реА рдХреЗ рдЕрдЧрд▓реЗ рдмреНрд▓реЙрдХ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрджрд┐ред рдореЗрдореЛрд░реА рдХреЛ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рдореБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рднреА рдЖрд╡рдВрдЯрд┐рдд рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рдореБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЛ рдХрд┐рд╕реА рднреА рдХреЙрд▓ рдХреЗ рдмрд┐рдирд╛ред
рд╕рднреА рдмреНрд▓реЙрдХреЛрдВ рдХрд╛ рдЖрдХрд╛рд░ рд╕рдорд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкрд╛рд╕-рдереНрд░реВ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддрддреНрд╡ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
template <typename T> typename MassAllocator<T>::reference MassAllocator<T>::operator[](size_type index) { size_t indexOfBlock = index / elementsInBlockCount_; size_t indexInBlock = index % elementsInBlockCount_; return blocks_[indexOfBlock][indexInBlock]; }
рдПрдХ рдирдИ рд╡рд╕реНрддреБ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░реЗрдВ
рддреЛ, рд╕рднреА рддрддреНрд╡ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдирдП рддрддреНрд╡ рдХрд╛ рд╡рд┐рддрд░рдг рдмрд╣реБрдд рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИ: рдЖрдкрдХреЛ рдЪрдпрдирд┐рдд рддрддреНрд╡реЛрдВ рдХреЗ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдмреНрд▓реЙрдХ рдореЗрдВ рд╡рд╣ рд╕реНрдерд╛рди рдЬрд╣рд╛рдВ рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЧрдП рддрддреНрд╡ рдЦрддреНрдо рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдПрдХ рдирдпрд╛ рдмреНрд▓реЙрдХ рдЪреБрдиреЗрдВред рдмреЗрд╢рдХ, рд╡рд┐рднрд┐рдиреНрди рдереНрд░реЗрдбреНрд╕ рд╕реЗ рдмрдврд╝реЗ рд╣реБрдП рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдкрд░рдорд╛рдгреБ рдЪрд░ std :: рдкрд░рдорд╛рдгреБ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдХреЗрд╡рд▓ рд▓реЙрдХ-рдлреНрд░реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП!
рдкрд░рдорд╛рдгреБ рдХрд╛рдЙрдВрдЯрд░ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рддрдХ рдмреНрд▓реЙрдХ рдореЗрдВ рдЬрдЧрд╣ рд╣реИ рддрдм рддрдХ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред рд▓реЗрдХрд┐рди рдмреНрд▓реЙрдХ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рдмреНрд▓реЙрдХ рдХреЛ рдПрдХ рдзрд╛рдЧреЗ рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдмрд╛рдХреА рдХреЛ рдЗрд╕ рд╕рдордп рдХреЗ рд▓рд┐рдП рд░реЛрдХрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдмреНрд▓реЙрдХ рдЖрд╡рдВрдЯрди рдХреЗ рдмрд╛рдж рдХрд╛рдо рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдкрд░рдорд╛рдгреБ рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдПрдХ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛: рдореЗрдореЛрд░реА рдмреНрд▓реЙрдХ рдЖрд╡рдВрдЯрди рд╕рдордп рдХрд╛рдлреА рдХрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╢реЗрд╖ рдзрд╛рдЧреЗ рдПрдХ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдкреНрд░рддреАрдХреНрд╖рд╛ рдЪрдХреНрд░ рдореЗрдВ 32-рдмрд┐рдЯ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдУрд╡рд░рдлреНрд▓реЛ рди рдХрд░ рд╕рдХреЗрдВред рдПрдХреНрд╕реЗрд╕ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП, 64-рдмрд┐рдЯ рдкрд░рдорд╛рдгреБ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ 2 рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ: рдирд┐рдЪрд▓реЗ 32 рдмрд┐рдЯреНрд╕ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рддрддреНрд╡ рдХрд╛ рдХрд╛рдЙрдВрдЯрд░ рд╣реИрдВ, рдФрд░ рдКрдкрд░реА 32 рдмрд┐рдЯреНрд╕ рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдмреНрд▓реЙрдХ рдХрд╛ рдХрд╛рдЙрдВрдЯрд░ рд╣реИрдВред рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
std::atomic<uint64_t> curAtomicIndex_
рдкреНрд░рддреНрдпреЗрдХ рдореЗрдореЛрд░реА рдмреНрд▓реЙрдХ рдореЗрдВ, рддрддреНрд╡реЛрдВ рдХреА рд╕рдорд╛рди рд╕рдВрдЦреНрдпрд╛ рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 100000ред рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдмреНрд▓реЙрдХ рдореЗрдВ рддрддреНрд╡ рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рд▓рд┐рдП рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ:
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рджреЛ 32 рдмрд┐рдЯ рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдкрд░ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рджреМрдбрд╝ рдкреНрд░рднрд╛рд╡ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреНрд▓реЙрдХ рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдмреНрд▓реЙрдХ рдирдВрдмрд░ред
рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдереНрд░реЗрдб рдХреЛ рдЖрдЗрдЯрдордЗрдВрдбреЗрдХреНрд╕ рддрддреНрд╡ рдХрд╛ рдПрдХ рд╡реИрдз рд╕реВрдЪрдХрд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ, рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рдХрд┐ рдмреНрд▓реЙрдХрдЖрдИрдПрдирдПрдХреНрд╕рдПрдХреНрд╕ рдмреНрд▓реЙрдХ рдЗрдВрдбреЗрдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛, рддрдм рддрдХ рдереНрд░реЗрдб рд╢реЗрдбреНрдпреВрд▓рд░ рдиреЗ рдЗрд╕реЗ рд╕реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд░рдЦ рджрд┐рдпрд╛ рдФрд░ рдиреАрдВрдж рдХреЗ рджреМрд░рд╛рди рдПрдХ рдЕрдиреНрдп рдмреНрд▓реЙрдХ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдирдпрд╛ рдмреНрд▓реЙрдХ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛, рдлрд┐рд░ рдереНрд░реЗрдб рдХреЛ рдЬрд╛рдЧрдиреЗ рдкрд░ рдЧрд▓рдд рдмреНрд▓реЙрдХ рдХрд╛ рдЗрдВрдбреЗрдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рддрддреНрд╡ рдЖрд░рдХреНрд╖рд┐рдд рдерд╛ред рдЗрд╕рд▓рд┐рдП, рддрддреНрд╡ рд╕реВрдЪрдХрд╛рдВрдХ рдФрд░ рдмреНрд▓реЙрдХ рдЗрдВрдбреЗрдХреНрд╕ рджреЛрдиреЛрдВ рдХреЛ рдкрд░рдорд╛рдгреБ рд░реВрдк рд╕реЗ рдпрд╛ рддреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦрдВрдб рдореЗрдВ рдпрд╛ рдПрдХ рдкрд░рдорд╛рдгреБ рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХрд┐рд╕реА рддрддреНрд╡ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рд╕рд╛рде рдЪрдпрдирд┐рдд рддрддреНрд╡ рдХреЛ рдЗрд╕ рддрддреНрд╡ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ 64 рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рдКрдкрд░реА рдФрд░ рдирд┐рдЪрд▓реЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдХреЙрд▓ рдпреВрдирд┐рдпрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдмрд┐рдЯ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдирд╣реАрдВред
template <typename T> typename MassAllocator<T>::pointer MassAllocator<T>::createElement(size_type *returningIndex) {
рдЙрддреНрдкрд╛рджрдХрддрд╛
X64 рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рддрд╣рдд, MassAllocator рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП 8 рдереНрд░реЗрдбреНрд╕ рдореЗрдВ 80 рдорд┐рд▓рд┐рдпрди рддрддреНрд╡реЛрдВ рдХрд╛ рдЖрд╡рдВрдЯрди рд▓рдЧрднрдЧ 2000 рдПрдордПрд╕ рдореЗрдВ i5 2500K рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, 70 ms рдореЗрдВ рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрддрд╛ рд╣реИред рдирдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЕрд▓рдЧрд╛рд╡ рд▓рдЧрднрдЧ 1350 рдПрдордПрд╕ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбрд┐рд▓реАрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рд▓реЛрдкрди 17400 рдПрдордПрд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ! рдбрд┐рдмрдЧрд░ рдХреЗ рддрд╣рдд, рднрд▓реЗ рд╣реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░рд┐рд▓реАрдЬрд╝ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореИрдВ рдХрднреА рднреА рдкрд░реАрдХреНрд╖рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред
X86 рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЖрд╡рдВрдЯрд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЖрдзрд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдХреНрдпреЛрдВрдХрд┐ рдирдП-рдбрд┐рд▓реАрдЯ рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рдУрд╡рд░рд╣реЗрдб рд╣реИ рдФрд░ 80 рдорд┐рд▓рд┐рдпрди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдкрддрд╛ рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИред 40 рдорд┐рд▓рд┐рдпрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ MassAllocator рджреНрд╡рд╛рд░рд╛ 2400 ms рдореЗрдВ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, 35 ms рдореЗрдВ рдореБрдХреНрдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЬрдмрдХрд┐ рдирдпрд╛ 750 ms рдореЗрдВ рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ 6430 ms рдореЗрдВ рд╣рдЯрд╛рддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдПрдХ рдЕрдбрд╝рдЪрди рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ - рдкрд░рдорд╛рдгреБ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдмрдврд╝рд╛рдирд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ x86 рдХреЗ рддрд╣рддред рдЕрднреА рддрдХ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЛ рддреЗрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдХрдЯреНрдЯрд░рдкрдВрдереА рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рд▓реЙрдХ-рдлреНрд░реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдб рдХреЛ рддреЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдФрд░ / рдпрд╛ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреАред
Update1
рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп 64-рдмрд┐рдЯ рдХрд╛рдЙрдВрдЯрд░ рдХреНрдпреВрд░реЗрдЯреЛрдорд╛рдЗрдХреНрд▓реЗрдХреНрд╕_ рдХреЗ рдкрд░рдорд╛рдгреБ рд╡реГрджреНрдзрд┐ рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред X64 рдореЗрдВ, рдпрд╣ рдПрдХ рдПрдХрд▓ рдХреЛрдбрд╛рдВрддрд░рдХ рдХрдорд╛рдВрдб
lock xadd QWORD PTR
рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ, x86 рдореЛрдб рдореЗрдВ рдкреВрд░реА рдХрд╡рд┐рддрд╛ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ
$again$158: ; 2424 : again: ; 2425 : mov ecx, edx; mov ecx, edx ; 2426 : mov ebx, eax; mov ebx, eax ; 2427 : add ebx, dword ptr _Value; add ebx, DWORD PTR $T7[ebp] ; 2428 : adc ecx, dword ptr _Value[4]; adc ecx, DWORD PTR $T7[ebp+4] ; 2429 : lock cmpxchg8b [esi]; lock cmpxchg8b QWORD PTR [esi] ; 2430 : jnz again; jne SHORT $again$158
рдЗрд╕рд▓рд┐рдП, 64 рдмрд┐рдЯ рдореЛрдб рдореЗрдВ рдПрдХ рддрддреНрд╡ рдХрд╛ рдЪрдпрди рдмрд╣реБрдд рддреЗрдЬ рд╣реИред
рдореЗрдореЛрд░реА рдХреЛ рдлреНрд░реА рдХрд░рдирд╛ x64 рдФрд░ x86 рджреЛрдиреЛрдВ рдореЗрдВ рддреЗрдЬ рд╣реИред
boost::object_pool
рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛
boost::object_pool
, рдЬреЛ рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб рдирд╣реАрдВ рд╣реИ рдФрд░ рдХрдИ рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдирдП-рдбрд┐рд▓реАрдЯ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк
boost::fast_pool_allocator
рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
boost::fast_pool_allocator
, рдпрд╣ рдирдП-рдбрд┐рд▓реАрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рдЧрддрд┐ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдФрд░ 32 рдмрд┐рдЯ рдореЛрдб рдореЗрдВ рдпрд╣ рддреЗрдЬреА рд╕реЗ рдЖрд╡рдВрдЯрди рдХреЗ рдХрд╛рд░рдг MassAlloc рдХреЗ рд╕рд╛рде рд╕рдордЧреНрд░ рд╡рд░реНрдЧреАрдХрд░рдг (рдЖрд╡рдВрдЯрди + рд░рд┐рд▓реАрдЬ) рдореЗрдВ рднреА рдмрд░рд╛рдмрд░ рд╣реИред
рдореЗрдореЛрд░реА рджрдХреНрд╖рддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╕рднреА рд╡рд┐рдХрд▓реНрдк рдорд╛рд╕рдЕрд▓реЛрдХ рд╕реЗ рдиреАрдЪ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП 32-рдмрд┐рдЯ рдореЛрдб рдореЗрдВ рди рддреЛ рдирдП-рдбрд┐рд▓реАрдЯ рдФрд░ рди рд╣реА рдмрдврд╝рд╛рд╡рд╛ :: fast_pool_allocator рдореЗрдВ 80 рдорд┐рд▓рд┐рдпрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдкрддрд╛ рд╕реНрдерд╛рди рд╣реИ, рдЬрдмрдХрд┐ MassAllocator 1570 рдПрдордмреА рдХреА рдЦрдкрдд рдХрд░рддрд╛ рд╣реИред