我是新来的,并且在我的 Ubuntu 14.04 计算机上使用(版本 4.8.2)测试线程本地存储(TLS)类,具有 i686/32 位架构。gcc
在试图找出__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
问题还是一个真正的问题?