Сообщение Re: быстрый new/delete от 29.11.2022 22:07
Изменено 29.11.2022 22:09 Умака Кумакаки
Re: быстрый new/delete
Здравствуйте, maks1180, Вы писали:
M>Может есть готовое решение или что-то лучше ?
зачем все эти извращения? стандартный аллокатор и так работает очень быстро. как альтернативный готовый вариант можно взять tcmalloc
а вообще верхний предел количества аллоцируемых объектов?
например если их максимум 128к одновременно живых и хочется странного, то заводится фиксированный буфер на 128к объектов, и битовая карта, где бит — свободен объект или нет.
аллокация — поиск первого нулевого бита в битовой карте (и устанавливаем его в единицу, ессно), деалокация — получаем индекс объекта в буфере (разность указателя на объект и указателя на начало буфера) и устанавливаем бит с этим индексом в 1
128к бит это 16к байт, целиком влезет в кеш L1 и сканироваться (аллоцировать один объект) будет за десяток наносекунд
M>Может есть готовое решение или что-то лучше ?
зачем все эти извращения? стандартный аллокатор и так работает очень быстро. как альтернативный готовый вариант можно взять tcmalloc
а вообще верхний предел количества аллоцируемых объектов?
например если их максимум 128к одновременно живых и хочется странного, то заводится фиксированный буфер на 128к объектов, и битовая карта, где бит — свободен объект или нет.
аллокация — поиск первого нулевого бита в битовой карте (и устанавливаем его в единицу, ессно), деалокация — получаем индекс объекта в буфере (разность указателя на объект и указателя на начало буфера) и устанавливаем бит с этим индексом в 1
128к бит это 16к байт, целиком влезет в кеш L1 и сканироваться (аллоцировать один объект) будет за десяток наносекунд
Re: быстрый new/delete
Здравствуйте, maks1180, Вы писали:
M>Может есть готовое решение или что-то лучше ?
зачем все эти извращения? стандартный аллокатор и так работает очень быстро. как альтернативный готовый вариант можно взять tcmalloc
а вообще верхний предел количества аллоцируемых объектов?
например если их максимум 128к одновременно живых и хочется странного, то заводится фиксированный буфер на 128к объектов, и битовая карта, где бит — свободен объект или нет.
аллокация — поиск первого нулевого бита в битовой карте (и устанавливаем его в единицу, ессно), деалокация — получаем индекс объекта в буфере (разность указателя на объект и указателя на начало буфера) и устанавливаем бит с этим индексом в 0
128к бит это 16к байт, целиком влезет в кеш L1 и сканироваться (аллоцировать один объект) будет за десяток наносекунд
M>Может есть готовое решение или что-то лучше ?
зачем все эти извращения? стандартный аллокатор и так работает очень быстро. как альтернативный готовый вариант можно взять tcmalloc
а вообще верхний предел количества аллоцируемых объектов?
например если их максимум 128к одновременно живых и хочется странного, то заводится фиксированный буфер на 128к объектов, и битовая карта, где бит — свободен объект или нет.
аллокация — поиск первого нулевого бита в битовой карте (и устанавливаем его в единицу, ессно), деалокация — получаем индекс объекта в буфере (разность указателя на объект и указателя на начало буфера) и устанавливаем бит с этим индексом в 0
128к бит это 16к байт, целиком влезет в кеш L1 и сканироваться (аллоцировать один объект) будет за десяток наносекунд