std::memmove
提供: cppreference.com
ヘッダ <cstring> で定義
|
||
void* memmove( void* dest, const void* src, std::size_t count ); |
||
src
の指すオブジェクトから dest
の指すオブジェクトに count
個の文字をコピーします。 どちらのオブジェクトも unsigned char の配列として再解釈されます。
オブジェクトはオーバーラップしても構いません。 コピーは、文字が一時的な文字配列にコピーされ、その後その配列から 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言語リファレンス
|