std::memmove
提供: cppreference.com
ヘッダ <cstring> で定義 | ||
void* memmove(void* dest, constvoid* src, std::size_t count ); | ||
src
の指すオブジェクトから dest
の指すオブジェクトに count
個の文字をコピーします。 どちらのオブジェクトも unsignedchar の配列として再解釈されます。
オブジェクトはオーバーラップしても構いません。 コピーは、文字が一時的な文字配列にコピーされ、その後その配列から dest
にコピーされたかのように、行われます。
dest
または src
のいずれかが無効またはヌルポインタの場合、動作は未定義です (たとえ count
がゼロでも)。
オブジェクトが潜在的にオーバーラップしている、または TriviallyCopyable でない場合、 memmove
の動作は規定されず、未定義になることがあります。
目次 |
[編集]引数
dest | - | コピー先のメモリ位置を指すポインタ |
src | - | コピー元のメモリ位置を指すポインタ |
count | - | コピーするバイト数 |
[編集]戻り値
dest
。
[編集]ノート
一時的なバッファを使用する「かのように」と規定されているにもかかわらず、この関数の実際の実装は二回のコピーや余分なメモリのオーバーヘッドを負担しません。 小さな count に対しては、レジスタにロードし、書き出すかもしれません。 大きなブロックに対しては、一般的な手法 (glibc および bsd libc) は、コピー先がコピー元より前に始まるならばバッファの先頭から順方向に、そうでなければ末尾から逆方向にバイトをコピーし、オーバーラップがまったくないときは std::memcpy にフォールバックします。
[編集]例
Run this code
出力:
1234567890 1234456890
[編集]関連項目
バッファを別のバッファへコピーします (関数) | |
バッファを文字で埋めます (関数) | |
2つのオーバーラップしている可能性のある配列間でワイド文字を一定量コピーします (関数) | |
(C++11) | 指定範囲の要素を新しい位置にコピーします (関数テンプレート) |
指定範囲の要素を後ろからコピーします (関数テンプレート) | |
(C++11) | 型がトリビアルにコピー可能かどうか調べます (クラステンプレート) |
memmove の C言語リファレンス |