Я работаю над настраиваемым распределением памяти стиля стилей mark-release для языка программирования D, который работает путем выделения из локальных областей потока. Похоже, что узкое место в локальном хранилище потоков вызывает значительное (~ 50%) замедление в распределении памяти из этих регионов по сравнению с идентичной однопоточной версией кода, даже после разработки моего кода, чтобы иметь только один поиск TLS для распределения/открепление. Это основано на многократном распределении/освобождении памяти в цикле, и я пытаюсь выяснить, является ли это артефактом моего метода бенчмаркинга. Я понимаю, что локальное хранилище потоков должно в основном включать доступ к чему-либо через дополнительный слой косвенности, подобно доступу к переменной с помощью указателя. Это неверно? Сколько накладных расходов обычно имеется в потоковом локальном хранилище?
Примечание. Хотя я упоминаю D, меня также интересуют общие ответы, которые не относятся к D, поскольку реализация D-потоковой локальной памяти, скорее всего, улучшится, если она будет медленнее, чем лучшие реализации.