PHP变量内存分配问题记录整理_php技巧
今天碰到一个关于php变量内存分配的问题,记录一下。
如下这段代码:
$a = array (
'str' => 1,
'child' => 2
);
$b = $a;
$b['child'] = $a;
$b['child']['str'] = 2;
echo $b['str'];
$b = null;
echo $a['str'];
会输出什么呢,结果是11,$b=$a的时候其实并没有新分配内存,ab是指向的同一个区域,$b['child']=$a时,$b会先copy一份原来$a的内容,然后再修改,也就是说这时候$b和$a指向了不同的区域,再修改$a或者$b的时候都不会互相影响了。
再看这段代码:
class A
{
public $str = '';
public $child;
}
$a = new A();
$b = $a;
$a->str = 1;
$a->child = 2;
$b->child = $a;
$b->child->str = 2;
echo $b->str;
$b = null;
echo $a->str;
又会输出什么呢,结果是22,根据实际情况来判断,$b->child=$a的时候,并没有像数组那样,重新copy一份,ab以及a->child都是指向的同一片区域,这样改任何一个,其余几个都会被改掉。
可是PHP为啥要设计成这样呢。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Dalam pembangunan PHP, kita sering menemui mesej ralat PHPNotice:Undefinedvariable. Mesej ralat ini bermakna kami telah menggunakan pembolehubah yang tidak ditentukan dalam kod. Walaupun mesej ralat ini tidak akan menyebabkan kod ranap, ia akan menjejaskan kebolehbacaan dan kebolehselenggaraan kod. Di bawah, artikel ini akan memperkenalkan anda kepada beberapa kaedah untuk menyelesaikan ralat ini. 1. Gunakan fungsi error_reporting(E_ALL) semasa proses pembangunan Dalam pembangunan PHP, kita boleh

Amalan terbaik untuk peruntukan memori dalam fungsi Java termasuk menggunakan pengurusan memori automatik dan memastikan algoritma GC yang sesuai digunakan. Pantau corak peruntukan memori dan kenal pasti kebocoran atau kesesakan memori. Gunakan pengumpulan objek untuk menggunakan semula objek yang sama saiz. Elakkan sejumlah besar peruntukan jangka pendek dan pertimbangkan untuk menggunakan alternatif. Gunakan corak Objek Null untuk mengelak daripada mencipta objek yang tidak diperlukan. Keluarkan sumber asli secara eksplisit, memastikan memori yang tidak boleh diakses oleh JavaGC dikeluarkan.

Soalan: Bagaimana untuk menganalisis peruntukan memori fungsi Go? Jawapan: Gunakan fungsi heapprofile dalam pakej pprof untuk menjana longgokan timbunan. Analisis longgokan timbunan untuk menentukan jenis dan saiz peruntukan. Penerangan terperinci: Hasilkan longgokan timbunan: dayakan pemprofil timbunan dan panggil fungsi heapprofile. Analisis longgokan longgokan: Gunakan perintah gotoolpprof untuk menganalisis fail longgokan longgokan untuk melihat maklumat peruntukan.

Analisis mendalam tentang prinsip penghirisan Golang: peruntukan memori dan strategi pengembangan Pengenalan: Penghirisan ialah salah satu jenis data yang biasa digunakan di Golang Ia menyediakan cara yang mudah untuk mengendalikan jujukan data berterusan. Apabila menggunakan kepingan, adalah penting untuk memahami peruntukan memori dalaman dan strategi pengembangan untuk meningkatkan prestasi program. Dalam artikel ini, kami akan menyediakan analisis mendalam tentang prinsip penghirisan Golang, disertai dengan contoh kod tertentu. 1. Struktur ingatan dan prinsip asas penghirisan Di Golang, penghirisan ialah jenis rujukan kepada tatasusunan asas.

Dalam C++, terdapat perangkap yang perlu diperhatikan apabila fungsi memperuntukkan dan memusnahkan memori, termasuk kebocoran memori (menahan penunjuk pada memori yang tidak lagi diperlukan) dan penunjuk berjuntai (menunjuk ke memori yang dibebaskan). Untuk mengelakkan masalah ini, amalan terbaik termasuk: menggunakan penunjuk pintar (seperti std::shared_ptr) untuk mengurus memori secara automatik menggunakan teknik RAII untuk memastikan sumber dikeluarkan apabila objek di luar skop mengelak daripada mengembalikan penunjuk kepada pembolehubah setempat; untuk melepaskan peruntukan memori. Dengan mengikuti amalan ini, anda boleh memastikan kebolehpercayaan kod anda dan mengelakkan kebocoran memori dan penunjuk berjuntai.

Ralat biasa dalam peruntukan memori fungsi termasuk: 1) penunjuk mentah berjuntai 2) kebocoran memori 3) penunjuk liar; Penyelesaian: 1) Gunakan penunjuk pintar; 2) Gunakan RAII;

Perbezaan antara timbunan Java dan timbunan dan analisis senario aplikasi memerlukan contoh kod khusus Dalam program Java, timbunan dan timbunan ialah dua struktur data yang biasa digunakan, dan ia mengambil alih peranan dan fungsi yang berbeza dalam ingatan. Memahami perbezaan antara timbunan dan timbunan adalah penting untuk menulis program Java yang cekap. Mula-mula, mari kita lihat timbunan Java. Heap ialah kawasan yang digunakan untuk menyimpan objek Semua objek yang dicipta dalam program disimpan dalam timbunan. Timbunan adalah tempat memori diperuntukkan dan dikeluarkan secara dinamik semasa program berjalan Ia tidak tertakluk kepada sebarang sekatan dan boleh secara automatik

Mencapai Peruntukan Memori yang Cekap dan Pengumpulan Sampah dalam Bahasa Go Dalam bahasa pengaturcaraan moden, adalah sangat penting untuk mengurus memori dengan berkesan. Sebagai bahasa yang dilahirkan untuk kecekapan, bahasa Go menyediakan pengurusan memori dan mekanisme pengumpulan sampah yang ringkas dan mudah digunakan untuk membantu pembangun mencapai peruntukan dan pelepasan memori yang cekap tanpa perlu mengendalikan memori secara manual. Peruntukan memori dalam bahasa Go adalah tanggungjawab sistem masa jalan. Ia menyediakan kawasan memori yang dipanggil Heap untuk menyimpan objek yang diperuntukkan secara dinamik, tatasusunan, kepingan, dll. Apabila kita menggunakan n
