【发布时间】:2015-12-01 15:38:04
【问题描述】:
我是新用户并在我的 i686/32 位架构的 Ubuntu 14.04 计算机上使用 gcc(版本 4.8.2)测试 thread-local storage (TLS) 类。
为了确定__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 问题还是真正的问题?
【问题讨论】:
标签: c multithreading gcc nm