CopyMemoryとは何者?
業務でJavaとかC#、プライベートでもPHPとかしかやってない俺が
C++やって死にそうになっています。
ちなみにCは少しだけ勉強した記憶がある程度。
で、そんなときにぶち当たる壁というのがポインタです。
一応Javaなんかでも参照変数みたいなのがあって
ある意味ポインタちっくな概念があるにはありますが
やっぱりC++みたいにポインタ使ってナンボな言語は
俺みたいなポインタ初心者はドン引きなんですね、はい。
で、今回CopyMemoryっていうWindows APIを使う必要があったので
ちょっと調べてメモっておきます。
できる人にとっては常識なんでしょうが、まぁいいじゃないですか。
まずこのCopyMemoryは何をするAPI?という疑問についてですが
指定したメモリブロック(メモリ上のデータの塊)の内容を
他のメモリアドレス位置にごっそりコピる事ができるらしいです。
ではどんな時に使うのか?ってのを考えてみると…
例えば、めちゃめちゃ沢山の配列要素を別の配列にコピりたい時
for文でぐるぐるやるよりCopyMemoryを使った方が
圧倒的に処理効率が良いようです。
だからこんな時はこのAPIを使用すべきです。
なんてったってこれ一個書くだけで
スパッとよろしくやってくれるんですから。
で、書き方は以下の通り。
VOID CopyMemory( PVOID Destination, // コピー先 CONST VOID *Source, // コピー元メモリブロック SIZE_T Length // メモリブロックのサイズ );
パラメータはこんな感じです。
・Destination コピー先の開始アドレスへのポインタ。 例えるなら引越し先の住所ってとこかな。 ・Source コピー元のメモリブロックの開始アドレスへのポインタ。 まぁ現住所みたいなもんでしょう。 ・Length コピーしたいメモリブロックのバイト数。 引越し荷物の量でいいや(適当すぎか?)。
この時、Lengthには特に注意した方が良いみたいです。
重要なメモリ領域を書き換えてしまって
最悪OSが落ちる事もあるという、あぁ恐ろしい。
というわけで、使用例は良いのが思いついたら追記したいと思います。
まずはここまでという事で。