i686/32 ビット アーキテクチャの Ubuntu 14.04 コンピューターで、(バージョン 4.8.2) を使用してスレッド ローカル ストレージ(TLS) クラスを初めて使用し、テストしています。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文字で示されます。LB
ここで何が問題なのですか?
これはnm問題ですか、それとも本当の問題ですか?