これは、アトミック操作でサポートされている型に関する最近の gcc マニュアルからの引用です。
4 つの非算術関数 (load、store、exchange、compare exchange) にはすべて汎用バージョンもあります。この汎用バージョンは、あらゆるデータ型で機能します。データ型のサイズが、ロック フリーをサポートしている可能性がある整数サイズの 1 つにマップされている場合、ジェネリック バージョンはロック フリー組み込み関数を利用します。それ以外の場合、外部呼び出しは実行時に解決される必要があります。この外部呼び出しは、指しているオブジェクトのサイズを示す最初のパラメーターとして挿入された「size_t」パラメーターが追加された同じ形式です。すべてのオブジェクトは同じサイズでなければなりません。
元のドキュメントはgcc 4.8.1です。ハードウェアは、単純な 32、64、場合によっては 128 ビット型でのみアトミック操作を実行できると想定しています。では、ポインターを受け取るこれらの関数の汎用バージョンはどうなるでしょうか? 実際にアトミックにできるのはポインタへのアクセスだけですよね?
関連する追加の質問は、これらのアトミックは、すべてがボックス化されている Java のような言語でどのように機能するのかということです。アトミックにアクセスされるのは、値ですか、それとも参照ですか?