問題タブ [pointer-aliasing]
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 - 「const restrict」ポインター引数をエイリアスすることは合法ですか?
dot_product
として宣言されている場合
でそれを呼び出すだろう
C99標準に従って、「未定義」になりますか?
編集
x
sizeof(float) * x_len
もちろん、メモリのバイトを指すポインターx_len
ですunsigned
。この質問はエイリアシングに関するものです。
c++ - ポインターのエイリアシングとパフォーマンスの向上
簡単な質問です(うまくいけば、それは明らかです)。
ポインターのエイリアシングの問題を処理すると、速度を考慮した場合のパフォーマンスが大幅に向上すると言われました (コンパイラーは、指している値が別のポインターによって変更されていないことを確認できないため、常にメモリから値をリロードします)。これは、たとえば次のようにポインターを定数にすることで解決できます。
私の質問は、次のようなループ内のはるかに大きなデータ配列に対してこの機能を実装する方法です。
c - 警告の結果「型がパニングされたポインターを逆参照すると、厳密なエイリアス規則が破られます」
同様のトピックとそれに関連するいくつかの資料について、いくつかのクエリを実行しました。しかし、私の質問は主に、以下のコードの警告を理解することです。直したくない!! ユニオンまたはmemcpyの 2 つの方法があることを理解しています。
以下の重要な点に注意してください
。 1. ここでのキャストに含まれる型は両方とも 32 ビットです。(または私は間違っていますか?)
2. どちらもローカル変数です。
コンパイラ固有のポイント:
1. コードはプラットフォームに依存しないはずです。これは必須です!!
2. GCC でコンパイルしたところ、期待どおりに動作しました。(intをfloatとして再解釈できました)、これが警告を無視した理由です。
私の質問
1. このエイリアシングの場合、コンパイラはどのような最適化を実行できますか?
2. 両方が同じサイズを占有するため (そうでない場合は訂正してください)、そのようなコンパイラの最適化の副作用は何ですか?
3. 警告を安全に無視したり、エイリアシングをオフにしたりできますか?
4. コンパイラが最適化を実行しておらず、最初のコンパイル後にプログラムが壊れていない場合は? コンパイラが同じように動作するたびに(最適化を行わない)、安全に想定できますか?
5. エイリアシングは void * 型キャストにも適用されますか? または、標準の型キャスト (int、float など) にのみ適用されますか?
6. エイリアシング ルールを無効にすると、どのような影響がありますか?
編集済み
1. R および Matt McNabb の修正に基づいて2. 新しい質問を
追加
python - Pythonの2次元配列にエイリアシングはありますか?
リストのエイリアシングが Python の問題であることは知っていますが、それを回避する方法がわかりません。
A の値をまったく変更していませんが、A を返すと、まだ変更されています。
このリストはエイリアシングですか? もしそうなら、エイリアシングを起こさずに 2D 配列の要素をどのように変更しますか? どうもありがとう<3。
c++ - 配列内の項目の割り当てを解除しています
それがオブジェクトを持っている場合は、それを呼び出しましょう。配列と配列の両方に割り当てるo
と、2 つの配列があり、a で o または o にアクセスしようとするとどうなりますか? 例えば:typeo *a,*b;
o
a
b
delete[] b