Memahami Storan Objek dan Akses Fungsi Ahli dalam Himpunan x86
Storan Objek
Dalam x86 pemasangan, objek, termasuk kedua-dua struct dan kelas, disimpan sebagai blok memori bersebelahan. Dalam blok ini, pembolehubah ahli disusun secara berurutan mengikut susunan yang diisytiharkan. Alamat setiap pembolehubah ahli meningkat apabila blok dilalui.
Akses Fungsi Ahli
Fungsi ahli boleh mengakses objek melalui penuding ini. Dalam fungsi bukan ahli, alamat objek dihantar secara tersirat sebagai hujah pertama. Walau bagaimanapun, ini tidak berlaku untuk fungsi ahli kerana penunjuk ini tersirat.
Penunjuk ini menghala ke permulaan blok memori tempat objek disimpan. Menggunakan penunjuk ini, fungsi ahli boleh terus mengakses dan mengubah suai ahli data objek.
Sebagai contoh, jika kita mempunyai kelas bernama foo dengan pembolehubah ahli m_a dan m_b, dan fungsi ahli inc_a yang menambah m_a, himpunan kod untuk inc_a mungkin kelihatan seperti ini:
foo::inc_a(): mov eax, DWORD PTR [rdi+4] # eax = this->m_a lea edx, [rax+1] # edx = eax + 1 mov DWORD PTR [rdi+4], edx # this->m_a = edx ret
Ahli Maya Fungsi
Dalam kes kelas dengan fungsi ahli maya, tahap pengalakan tambahan diperkenalkan. Setiap contoh kelas menyimpan penunjuk ke jadual fungsi maya (vtable). Vtable mengandungi penunjuk kepada pelaksanaan sebenar fungsi ahli maya.
Apabila fungsi ahli maya dipanggil, atur cara mula-mula melompat ke entri vtable untuk fungsi itu. Sasaran lompatan ialah pelaksanaan fungsi sebenar, yang kemudiannya dilaksanakan.
Pengoptimuman Penyimpanan Objek
Walaupun objek biasanya disimpan dalam ingatan, ia juga mungkin disimpan dalam daftar . Penyusun boleh mengoptimumkan kod untuk mengelak daripada meletakkan objek dalam ingatan jika ia boleh disimpan dalam daftar sepanjang penggunaannya. Pengoptimuman ini boleh dilakukan apabila objek cukup kecil untuk dimuatkan dalam daftar dan ahlinya digunakan secara aktif.
Sebagai contoh, fungsi yang mengembalikan struct kecil mengikut nilai mungkin tidak memperuntukkan memori untuknya. Sebaliknya, pengkompil boleh membungkus ahli struct ke dalam daftar dan mengembalikannya terus.
Atas ialah kandungan terperinci Bagaimanakah fungsi ahli mengakses dan mengubah suai data objek dalam pemasangan x86?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!