Пометка переменной как thread_local
не влияет - AFAIK - на ее поведение при выделении памяти.Таким образом, вы должны получить то же поведение в отношении перераспределения на clear()
с неквалифицированным списком, локальным списком потоков, статическим списком и т. Д.
Также обратите внимание, что std::list
со стандартным распределителемвыделяет пространство для своих узлов в куче - единой, куче всего процесса (ses также параграф, процитированный из стандарта в этот вопрос об этой точке), и нет ничего локального для потока в этих распределениях.Это просто элементы данных уровня who (например, указатель на первый узел) локально для потока.
PS - я не уверен, что стандарт на самом деле требует освобождения любой памятивызов clear()
- но это определенно учитывает это, поскольку временная сложность этого метода может быть линейной.