Из GCC 4.8 черновика изменений:
g++ теперь реализует ключевое слово С++ 11
thread_local
; это отличается от ключевое слово GNU__thread
прежде всего тем, что оно позволяет динамически семантика инициализации и уничтожения. К сожалению, эта поддержка требуется штраф во время выполнения для ссылок на не-функционально-локальныеthread_local
, даже если им не нужна динамическая инициализация, поэтому пользователи могут продолжать использовать__thread
для переменных TLS с статическая семантика инициализации.
В чем же суть и происхождение этого временного штрафа?
Очевидно, что для поддержки не-функционально-локальных переменных thread_local
должна существовать фаза инициализации потока перед входом в каждую основную строку потока (так же как и статическая фаза инициализации для глобальных переменных), но относятся ли они к некоторым превышение времени выполнения?
Грубо говоря, что такое архитектура gcc новой реализации thread_local?