我是新手,並在我的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