問題タブ [unsafe-pointers]
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++ - ポインタの不適切な使用が引き起こす可能性のあるこれらのいわゆる「災害」とは何ですか?
私は自分のプログラムでポインターをますます使用しており、ポインターについて読んでいる間、私が見つけたすべてのガイドまたはチュートリアルは、ポインターの誤った使用が「悲惨な」結果をもたらす可能性があると述べました。
さて、いくつかの大きなメモリリークが発生し、ポインタが間違ったポインタ変数を逆参照して間違った値を返したことがありますが、それ以外は「悲惨な」ことはありません。私のコンピュータや他のプログラムがクラッシュするように。
誰かが私に簡単なコード例を教えてもらえますか?それは間違いなく「悲惨な」結果をもたらします。おそらく、そのコードを誤って使用したことがある場合に備えて、何が起こったのかについての裏話がありますか?「悲惨な」結果とは、他のプログラムやOSに干渉し、クラッシュする可能性のあるコードを意味します。
c# - C#:ガベージコレクションからデリゲートを保存する(静的オプションなし)
私は現在、C dllのラッパークラスで静的デリゲートを使用して、安全でない関数を指すデリゲートがガベージで収集されないようにしています。
これは、クラスの複数のインスタンスをサポートする必要があるまでは正常に機能していました。回避策は静的デリゲートのリストを保持することかもしれませんが、もっと簡単な解決策を見つけたいと思います。
c++ - カスタム弱/強参照ポインター
弱い/強い参照ポインター関係の独自の実装を作成していますが、構成に混乱しています。強い参照を含むクラスがあり、弱い参照を持つ別のクラスに強いポインターを設定したい場合、weak_ref ポインターのポインターを渡す必要がありますか?
誰かがこのコードを見て、感謝することを知らせてください。また、他の問題に気付いた場合はお知らせください。このページが煩雑にならないように、3 つのファイルを codepad ファイルに入れました。
WeakReference.h : http://codepad.org/nNtRk4vO
StrongReference.h : http://codepad.org/MGi0fZ4J
これを「boost を使用、std を使用、tr1 を使用」という引数に変えないでください。他のものを使用するのではなく、このコードに関するヘルプを探しています。
c++ - 弱い参照ポインターと強い参照ポインターの関係
私は自分の弱い/強いポインタを書こうとしていますが、その関係を明確に理解していません. 私が遭遇したように見えるすべてがそれを明確にするわけではなく、あるドキュメントが別のドキュメントの言うことを矛盾させることがよくあります. おそらく画像やコードサンプルも含めて、弱いポインタと強いポインタの関係を詳細に説明してもらえますか?
(「boostを使え」「tr1を使え」などとだけ言わないでください。これは宿題ではありません。学びたいです)。
c# - C# でパラメーターとして配列セクションへのポインターを渡す
私はちょうどニューラルネットワークを学んでおり、ニューロンのコンストラクターが染色体になる配列内のセクションへのポインターを受け取るようにしたいと考えています。このようなもの:
したがって、次のようなものでニューロンを作成します。
C#でこれを行うことは可能ですか? C# が安全でないコードをサポートしていることは知っています。public Neuron(int* chromosomeSection)
しかし、行が安全でないことをコンパイラに伝える方法がわかりません。
また、C++ または C で行うすべての操作を行うことができますか? この方法で作業を開始する前に、知っておくべき落とし穴はありますか? これまで C# で安全でないコードを扱ったことはありません。
c# - 安全でないポインタの反復とビットマップ-なぜUInt64の方が速いのですか?
私はいくつかの安全でないビットマップ操作を行ってきましたが、ポインターを増やす回数を減らすと、パフォーマンスが大幅に向上する可能性があることがわかりました。なぜそうなのかはわかりませんが、ループ内でより多くのビット単位の演算を実行する場合でも、ポインターに対して実行する反復回数を減らす方がよいでしょう。
したがって、たとえば、UInt32で32ビットピクセルを反復する代わりに、UInt64で2ピクセルを反復し、1サイクルで2回の操作を実行します。
以下は、2つのピクセルを読み取り、それらを変更することによってそれを行います(もちろん、奇数幅の画像では失敗しますが、テスト用です)。
次のコードはピクセルごとに実行し、前のコードよりも約70%遅くなります。
誰かがポインタをインクリメントすることが、いくつかのビット演算を実行するよりもコストのかかる操作である理由を明確にできますか?
.NET4フレームワークを使用しています。
このようなことがC++にも当てはまりますか?
NB。32ビットと64ビットの2つの方法の比率は同じですが、どちらの方法も64ビットと32ビットで20%遅くなりますか?
編集:Porgesとarulが示唆しているように、これはメモリ読み取り数の減少と分岐オーバーヘッドが原因である可能性があります。
EDIT2:
いくつかのテストの後、メモリからの読み取りにかかる時間が短縮されたことが答えのようです。
このコードでは、画像の幅が5で割り切れると仮定すると、400%速くなります。
次に、これを使用します。
c# - When is a fixed size array allocated on the stack?
I have the following method to copy bytes from a socket stream to disk:
What I am curious about is: will buffer
be allocated on the stack or on the
heap? To be sure, I could make this method unsafe, and add the fixed
keyword to
the variable declaration, but I don't want to do that ifn I don't have to.
java - JavaでUnsafeを使用してメモリを書き込み/読み取ります
jvm内のUnsafeクラスを使用することで、メモリへの直接の書き込みと読み取りが可能であることを私は知っています。
これが本当に危険で、どういうわけか逆効果であることは別として、私は代わりに、許可されたメモリ位置の境界をチェックするのは誰/何が担当しているのか疑問に思いました。また、すでに割り当てられているメモリが上書きされるのを防ぐメカニズムがある場合も同様です。この最新の質問に関連して、彼がすべきでないことを上書きすることによって、どのような損害を与えることができますか?さて、これは次のように最もよく改革することができます:どのタイプのメモリが書き込むことができるか、またはどのような種類の情報がすでにそこに保存されていますか?
ありがとう
c# - 配列の最初のエントリへのポインタを取得する
配列の最初のエントリのポインタを取得したい。これが私が試した方法です
次のコンパイルエラーを取得します。それを修正する方法はありますか?
固定ステートメント初期化子内の非固定式のアドレスのみを取得できます
c# - UInt64 を構造体として再解釈する
私のコードでは、UInt64 値を計算してから、次のようにキャストしています。
セルは構造体です。Marshal.SizeOf(new Cell()) は 8 を出力するため、UInt64 と一致するはずですが、上記のキャストは AccessViolationException でクラッシュします。おそらく Marshal.StructureToPtr などのより安全な方法を試すことができますが、コードのどこにエラーがあるのだろうか? たぶん、アライメントの不一致の問題ですか?