問題タブ [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 と個々の配列要素のコピー
CLRS の第 2 章には、挿入ソートの最悪の場合の実行時間を に改善するかどうかを尋ねる演習がありますO(n lg n)
。この質問を見て、それができないことがわかりました。
最悪の場合の複雑さを改善することはできませんがmemmove
、実際の実行時間を使用することで、配列要素を個別に移動するよりも優れているでしょうか?
要素を個別に移動するためのコード
を使用して要素を移動するためのコード memmove
2番目のものを完全に実行することはできませんでしたが、それは私が考えていることの例です。
を使用することで目に見える速度の向上はありますmemmove
か?
c - ビット単位のメモリ移動
bitwise を実装する最良の方法は何memmove
ですか? メソッドは追加の宛先とソースのビットオフセットを取り、カウントもビット単位である必要があります。
- ARM が非標準の を提供している
_membitmove
ことがわかりました。これはまさに私が必要としているものですが、そのソースが見つかりませんでした。 - バインドのビットセットには
isc_bitstring_copy
が含まれていますが、効率的ではありません - C 標準ライブラリがそのようなメソッドを提供していないことは承知していますが、同様のメソッドを提供するサードパーティ コードも見つかりませんでした。
c - memmove がバッファーのすべての内容をコピーしない - C
長さ7バイトのバッファを作成しようとしている次のコードがあり、バッファ内のchar配列とともに整数をネットワークバイトオーダーに入れます。バッファの最後にNull文字を含めるべきではありませsprintf()
んだから私はmemcpy()
7バイトだけをコピーするために使用しています。ただし、の後に異なるバッファーを取得しているようですmemcpy()
。
コード:
次の出力が得られます。
c++ - std::copy の制限は std::memcopy よりも緩いですか?
問題 copy vs. memcpy vs memmoveに関して(ここで優れ た情報、ところで)、私は読んでいて、口頭で言われていることとは異なり、たとえばcppreference注: memcpy はに変更されましたこの引用を受け取ってからmemmove。 --
ノート
実際には、 の実装では
std::copy
複数の代入を避けstd::memcpy
、値の型がTriviallyCopyable
-- std::copy
(nor std::copy_backward
)は、宛先範囲の先頭のみがソース範囲に入ってはならず、範囲全体が重複してはならないため、 に関して実装することはできません。memcopy
std::copy
memcpy
Visual-C++ の実装 (xutility
ヘッダーを参照) を見ると、VC++ がmemmoveを使用していることもわかりますが、現在は よりも要件が緩和されていますstd::copy
。
... オブジェクトがオーバーラップする可能性があります。コピーは、文字が一時的な文字配列にコピーされ、次に文字が配列からコピーされたかのように行われます ...
したがってstd::copy
、の観点からの実装memcpy
は不可能に見えますが、使用memmove
は実際にはペシミゼーションです。(ほんの少しの悲観化、おそらく測定できないかもしれませんが、それでも)
質問に戻るには:私の要約は正しいですか? これはどこかで問題がありますか?指定されているものに関係なく、memcpy
の要件も満たさないの実用std::copy
的なmemcpy
実装の可能性さえありstd::copy
ますか?
c - memmoveの実装について
wikibooks.orgでパブリック ドメインの実装を見ていました。次のように memmove() を実装し、「完全に移植可能ではない」ことを明示的に述べています。なぜだろうと思っていました:
- かっこはコードの最初の行に配置され、
- コードは完全に移植可能ではありません。
コードは次のとおりです。
c - memmove で __np_anyptrlt を使用しますか?
このリンクから: http://clc-wiki.net/wiki/memmove
の使用は__np_anyptrlt
冗長ですか?なぜ使用しないのif (ps < pd)
ですか?
memcpy - いつ memcpy を使用し、いつ memmove を使用する必要がありますか?
memcpy と memmove 関数の間に重要な違いはありますか? いつ memcpy を使用し、いつ memmove を使用する必要がありますか?
c++ - memmove は (for ループと同じように) 要素をシフトしますか、それとも一度にメモリ ブロック全体を取得しますか?
私のアルゴリズムのクラスでは、整数のリストの重複を削除するアルゴリズムを導入し、可能な限り複雑さを軽減する必要があります。私のアルゴリズムでは、重複する整数が表示されると、for ループを使用して重複した要素を削除するために、その整数の後のすべての要素を 1 インデックス下にシフトします。そのようです:
アルゴリズムが memmove を使用する方が効率的でしょうか? さらに、アルゴリズムを設計することが私の仕事であり、memmove がアルゴリズムの複雑さを軽減すると仮定すると、memmove の使用は「不正行為」と見なされる可能性がありますか?