Я новичок в тестировании потокового локального хранилища (TLS) с gcc
(версия 4.8.2) на моем компьютере Ubuntu 14.04 с архитектурой i686/32 бит.gcc: Thread-локальная переменная, скомпилированная как BSS
В попытке выяснить, имеет ли __thread
ключевое слово желаемого эффекта, я скомпилировать этот минималистичный тестовую программу с gcc test.c
(без ошибок или предупреждений):
#include <stdio.h>
__thread int i;
int main() {
i = 7;
printf("%d\n",i);
}
и использовать инструмент на nm
проверить класс хранения символа i
в коде объекта:
nm a.out | grep ' i'
в результате
00000000 B i
Это означает, что i
рассматривается как общая глобальная неинициализированная переменная (хранится в разделе BSS). Согласно man nm
, переменные локального хранилища потоков обозначаются буквой L
, а не B
.
Что здесь не так?
Это проблема nm
или проблема?
Вот и все. Спасибо за объяснение, действительно, я получаю тот же результат. Что касается man-страницы, я был на странице руководства UNIX в Интернете, не понимая. – rplantiko