問題タブ [gcc4.8]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Gnu C++ 4.8 thread_local 実装の背後にあるメカニズムと、正確な「実行時ペナルティ」とは何ですか?
gcc 4.8.0 thread_local
では、C++11 標準からの実装が追加されました。変更は、「実行時にペナルティ」が発生する可能性があると述べています。
G++ は C++11
thread_local
キーワードを実装するようになりました。[...] 残念ながら、このサポートでは、動的な初期化が必要ない場合でも、別の翻訳単位で定義された非関数ローカル変数への参照に対して実行時のペナルティがthread_local
必要です [...]。非定義 TU での変数の使用が動的初期化をトリガーする必要がないことをプログラマーが確信できる場合 (変数が静的に初期化されるか、定義 TU での変数の使用が別の TU での使用の前に実行されるため) TU)、-fno-extern-tls-init オプションを使用してこのオーバーヘッドを回避できます。
thread_local
G++ がグローバル変数に対して何をするのか、誰か説明してもらえますか?
- 一般的なメカニズムは何ですか?
- 何がオーバーヘッドを誘発しますか?
- アクセスあたりのオーバーヘッドはどのくらいですか? ポインタの間接化?高価なロック?
- 正確には、どのような状況でオーバーヘッドが発生しませんか?
変更メモから、たとえば、これにはオーバーヘッドがないと仮定します。
data
同じ翻訳単位にあるからですか?
worker
とdata
が異なる翻訳単位にある場合、これはどのように変化しますか? これはその例ですか?
data
inを使用worker
するとオーバーヘッドが発生しますか? それがstart
キックオフだったとしても、まだそうworker
ですか?
gcc - Windows 7 x64 に GCC をインストールして使用する
私はGCCが初めてで、GCCについてあまり知りません。Windows 7 64 ビット PC にインストールして、C、C++、および Java で使用したいと考えています。最新バージョンは GCC-4.8.0 です。ミラー リンクで、gcc 4.8.0.tar.bz2とgcc 4.8.0.tar.gzとmd5.sumをダウンロードするオプションを取得しています。GCC を使用するには、どのように進めればよいか教えてください
build - gcc-4.8 のビルド
64 ビットの Fedora 17 サーバーで gcc/g++ 4.8 をコンパイルしようとしています。ビルドプロセスを構成しています
次に、make を実行します。ビルドはしばらくチャンクし、crti.o が見つからないと失敗します。失敗する前のコンパイル手順で -m32 オプションが使用されていることに気付きました。これは、コンパイルが 32 ビット アーキテクチャに対して実行されていることを意味します。crti.o を検索したところ、/usr/lib パス (通常は 32 ビット用) ではなく、/usr/lib64 パスで見つかりました。私は 64 ビット用にのみコンパイルしたいので、configure に with-cpu 引数を含めました。明らかに、これでは十分ではありません。
ソースから 64 ビットのコンパイルのみが作成され、64 ビットのシステム ライブラリと同様のファイルのみがリンクされるようにするには、configure にどの引数を含める必要がありますか?
c++ - 32ビットコンパイル時の__int128エラー
32 ビット プログラムをコンパイルすると、上記のエラーが表示されます。私はhttp://sourceforge.net/projects/mingwbuilds/を使用しています
なんで?私のコードは 4.7.2 で問題なくコンパイルされましたが、バグ修正のために 4.8 に更新したかったのですが、ゼロがない場合にポインター警告の null 値として使用される 0 が削除されます。
私が望むバグ修正の多く。Windowsでx64のものをうまくコンパイルします。
x32 アプリケーションをコンパイルする方法はありますか?
gcc4.8 - 「make check」はインストールされた共有ライブラリを見つけることができません
gcc 4.8 をインストールし、推奨されるインフラストラクチャ ライブラリを使用して問題を軽減しています。
デフォルト設定を使用してgmpをビルドおよびインストール->共有ライブラリは/usr/local/libに移動しましたislをビルドしましたが、インストールされたgmp共有ライブラリがmake checkで見つかりません。とにかくislをインストールすると、共有ライブラリは/usr/local/libに移動しました。cloog をビルドしましたが、make check もインストールされている isl または gmp 共有ライブラリを見つけることができません
そこで私は cloog-0.18.0/.libs/ に入り、/usr/local/lib/libisl.so.10.1.1 と libgmp.so.3 へのソフト リンクを作成し、失敗することなく make check を再実行しました。
これらは、gcc ftp サーバーからダウンロードされ、デフォルト構成を使用してビルドおよびインストールされる、推奨されるインフラストラクチャー tarball です。「make check」がインストールしたばかりの共有ライブラリを見つけられないのはなぜですか?
追加する必要があります:これは新しいUbuntuのインストールです
c++ - プライオリティ キューから unique_ptr を取得する
で一連のunique_ptr
インスタンスを維持していpriority_queue
ます。ある時点で、最初の要素を取得してキューから削除したいと考えています。ただし、これは常にコンパイラ エラーを生成します。以下のサンプルコードを参照してください。
これにより、次のコンパイラ エラーが発生します (gcc 4.8.0)。
この質問queue
のように使用するコードを変更すると、問題が修正され、コードは問題なくコンパイルされます。
unique_ptr
s を aに保持する方法はありませんか、priority_queue
それとも何か不足していますか?
gcc - Debian、libc6 で gcc-4.8 にアップグレードした後の g++ リンカ エラー
gcc-4.7 から gcc-4.8 を実行するように Debian Weezy マシンを dist-upgrade しました。以前のビルド環境は正常で、正常にコンパイルされていました。現在、どのプログラムでも (些細な hello world であっても)、次のリンカ エラーが発生します。
これは libc6 に接続された単純なものだと確信していますが、何がわかりませんか? dpkg がすべての依存関係を処理すると想定していたので、このエラーが表示されることに非常に驚いています。したがって、この特定のシステムに問題があるのか 、それとも debian パッケージに問題があるのか わかりません (これはありそうもないことです)。 、他の誰もこの問題を抱えていないようです!)
何か案は?:)
loops - GCC Graphite - 4.8 ループの最適化
私は C++ シミュレーション フレームワークに取り組んでいます。現在のバージョンでは、2 つのボトルネックを特定しました。1 つ目は乱数の生成であり、2 つ目 (この質問の動機) は高度に反復的なプロセス (重いfor loops
) の使用です。
ループの最適化に関する gcc 4.8 についてフィードバックをいただけないでしょうか。
私はこの主題に関するいくつかの利用可能な文献を読みましたが、この初期のバージョンから私が期待できることを (もっと簡単な言葉で) より明確にしていただけないでしょうか.
たとえば、 1 つの呼び出しは何ですかloop normalization
... または、マルチコア アーキテクチャとは何の関係がありますか...
また、最適化オプションの背後にあるもの:
-ftree-loop-optimize ツリーでループの最適化を実行します。このフラグは、-O 以上でデフォルトで有効になります。
-ftree-loop-linear ツリーでループ交換変換を実行します。-floop-interchange と同じ。このコード変換を使用するには、GCC を --with-ppl および --with-clog で構成して、Graphite ループ変換インフラストラクチャを有効にする必要があります。
-floop-interchange ループに対してループ交換変換を実行します。ネストされた 2 つのループを入れ替えると、内側のループと外側のループが切り替わります。
そこにコードの最適化やコンパイラの専門家はいますか? どうもありがとう。
NB : 現在、Debian 4.7.2、gcc 4.7 で作業しています
c++11 - thread_local を使用すると、gcc 4.8.1 でメモリ リークが発生しますか?
Valgrind は、次のコードでリークされたブロックを報告しています。明らかに、スレッドごとに 1 つです。
コンパイラのバージョン:
GCC ビルド オプション:
プログラムのコンパイル オプション:
valgrind バージョン:
Valgrind オプション:
valgrind 出力の末尾:
コンストラクタとデストラクタは、スレッドごとに 1 回実行されました。
ノート:
- 作成されるスレッドの数を変更すると、リークしたブロックの数はスレッドの数と一致します。
- コードは、GCC がそのように実装されている場合、リソースの再利用 (つまり、リークされたブロック) を許可するような方法で構造化されています。
- valgrind スタックトレースから、thread_local.cc:34 は次の行です。
thread_local Foo foo;
- sleep_for() 呼び出しのため、プログラムの実行には約 10 秒ほどかかります。
このメモリ リークが GCC にあるのか、設定オプションの結果なのか、それともプログラムのバグなのか、考えはありますか?