我是新手,并在我的Ubuntu 14.04计算机上使用i686/32位体系结构测试线程本地存储(TLS)类,gcc
(4.8.2版)。gcc:线程局部变量编译为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
问题或一个真正的问题?
就是这样。感谢您的解释,确实我得到了相同的输出。至于手册页,我在网上的一个UNIX手册页上没有意识到。 – rplantiko