0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PHPでの引数の渡し方によって、メモリの消費は異なる

Posted at

PHPでの引数の渡し方によって、メモリの消費は異なります。主に以下の2つの方法があります:

  1. 値渡し(デフォルト):
    値渡しの場合、引数として渡されたデータの新しいコピーが作成されます。これは追加のメモリを消費します。
function valuePass($x) {
    $x = 10;
}

$num = 5;
valuePass($num);

この場合、$numの値のコピーが作成され、関数内で使用されます。元の$numは変更されません。

  1. 参照渡し:
    参照渡しの場合、変数のメモリアドレスが渡されるため、追加のメモリは消費されません。
function referencePass(&$x) {
    $x = 20;
}

$num = 5;
referencePass($num);

この場合、$numのメモリアドレスが渡されるため、追加のメモリは使用されません。

ただし、以下の点に注意が必要です:

  • 小さなデータ型(整数や浮動小数点数など)の場合、値渡しと参照渡しのメモリ消費の差はほとんどありません。

  • 大きなデータ構造や複雑なオブジェクトを渡す場合、値渡しは大量のメモリを消費する可能性があります。

  • PHPはコピーオンライト(Copy-On-Write)メカニズムを使用しているため、値が変更されるまでは実際のコピーは行われません。

  • 関数呼び出し時に引数を修正する(例:function($large . "\n"))と、新しいメモリが確保される可能性があります。

結論として、通常の値渡しでは理論的には新しいメモリが確保されますが、PHPの最適化により実際のメモリ消費は状況によって異なります。大きなデータ構造を扱う場合や、パフォーマンスが重要な場合は、参照渡しを検討するとよいでしょう。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?