問題タブ [memmove]
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++ - memmove と逆方向のコピー
C ( memmove
cstring ライブラリ) では、ハンドルが適切にオーバーラップすることを理解しています。なぜこの追加のランタイム コストがかかるのだろうと思っていました。オーバーラップの問題は、前方ではなく後方にコピーすることで修正できるように思えますが、間違っていますか?
おもちゃの例として、配列の内容を右に 1 要素だけシフトする「右シフト」関数の 2 つのバージョンを次に示します。
それらは同等ですか?パフォーマンス的には、どちらを使用するのが最適ですか?
注: @DieterLücking のコメントから判断すると、予防措置が取られているにもかかわらず、上記のバージョンを使用することmemmove
は、この状況では安全ではありません。
c++ - C++アロケータを使用してメモリの一部が割り当てられているかどうかを確認する方法は?
メモリの特定の部分が単一の C++ 割り当てブロックに含まれているかどうかを判断する方法はありますか? 残念ながらリリースモードで。理想的には、Windows と Mac の両方で。
ここには本当に問題のあるバグがあります。これはリリース モードでのみ表示され、シミュレートが非常に難しく、マルチスレッドであり、通常はスタックを破壊します。memmove の呼び出しが原因のようですが、私の唯一の推測では、メモリの大部分が置き換えられており、アクセス違反が発生する前に、通常は既にスタックが置き換えられています。
アルゴリズムは非常に複雑で、これは文字通り時々発生し、効果的にシミュレートする方法がわからないため、私の唯一のアイデアは、引数が正しいことを確認するために memmove にテストを埋め込むことです。もちろん、各部分は単一の alloctor ブロックに配置する必要があるため、置換される特定のブロックが正しいかどうかを確認する必要があります。
arrays - cの特定の位置から別の配列に配列をコピーする
配列 A があり、この配列を位置 x から y まで C 言語の別の配列にコピーしたいと考えています。cで作成するのを手伝ってください。
memcpy を使用すると、配列が最初からのみコピーされます。特定の位置から別の位置にコピーしたい。
c++ - CUDA でのバッファのビット単位のシフト
ビット単位でCUDAのバッファをmemmoveする方法はありますか? たとえば、2 バイトのバッファーとポインターの場合
ビットオフセットを指定して、ビット部分を左または右にシフトしたいと思います。何かのようなもの
上記のバッファの場合、次のことが期待されます。
電話した後
CUDA のドキュメントまたは Google で、これに適した関数を見つけることができませんでした。
注意してください: 私は興味がありませんcudaMemcpy
または 通常のmemmove
. ビット単位の memmove が必要です。
また、通常の CPU でこれを行う方法についても認識しています。より効率的な代替手段が必要なため、CUDA を検討しています。
c - free() 関数は、いくつかの memmove の後にクラッシュを引き起こします
私はsplice
js の関数のように機能する関数を作成しています:(任意の型の)配列を指定し、指定されたインデックスで始まる要素を削除し、ギャップに新しい要素を詰め込みます(必要に応じて元の配列を拡張または縮小します)。
Windows7 で MinGw/Eclipse CDT を使用しています。これが私のコードです:
また、いくつかのテスト コードも作成します。以下のスニペットはlong long
タイプ用です。
7、111、233、および 377 を出力する必要があります (インデックス 1 から 6 つの要素を削除し、111、233、および 377 を配列に詰め込みます)。
char、int、および long 型の配列をテストしたところ、すべての状況でコードが機能しました。1 つの問題を除いて: 古い配列を解放できません。によって何度かアクセスされたメモリ ブロックは、再利用できないようmemmove
です。
(1) で malloc を realloc に変更すると、free() はクラッシュしなくなりますが、関数を正しく動作させることはできなくなります (そして、free() 関数が実際に動作したかどうかはわかりません)。
この問題がどのように発生するか、およびコードを改善するにはどうすればよいかについて、アドバイスをお願いします。