Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Objek Disimpan dan Diakses dalam Perhimpunan x86?

Bagaimanakah Objek Disimpan dan Diakses dalam Perhimpunan x86?

Barbara Streisand
Lepaskan: 2024-11-12 04:33:02
asal
974 orang telah melayarinya

How are Objects Stored and Accessed in x86 Assembly?

Memahami Penyimpanan Objek dalam Himpunan (x86)

Dalam pemasangan x86, objek disimpan sebagai blok memori bersebelahan. Mereka tidak dikaitkan secara semula jadi dengan kelas seperti dalam bahasa peringkat tinggi; sebaliknya, ia hanyalah bahagian bait yang boleh dimanipulasi oleh atur cara.

Storan Struktur dan Kelas

Struktur dan kelas disimpan secara sama, kecuali kelas dengan ahli maya mempunyai "vtable" tersirat ditambah sebagai elemen pertama. Vtable ini mengandungi penunjuk kepada setiap pelaksanaan fungsi maya, membenarkan pengikatan dinamik.

Akses Fungsi Ahli

Fungsi ahli diakses melalui penuding "ini" tersirat, iaitu diluluskan sebagai hujah pertama kepada fungsi tersebut. Penunjuk ini menunjuk ke objek yang ahlinya sedang diakses.

Penghantaran Fungsi Maya

Apabila fungsi maya dipanggil, pengkompil menyemak vtable objek untuk menentukan yang betul pelaksanaan fungsi. Tingkah laku dinamik ini membenarkan tingkah laku polimorfik di mana kelas terbitan berbeza boleh mengatasi fungsi maya kelas asas.

Pengoptimuman Daftar

Pengkompil boleh memilih untuk mengoptimumkan peruntukan memori untuk struct , terutamanya untuk struktur kecil atau pembolehubah tempatan. Ia boleh menyimpan ahli struct dalam daftar CPU, menghapuskan keperluan untuk akses memori.

Contoh

Pertimbangkan kod berikut:

struct foo {
  int m_a;
  int m_b;

  void inc_a() { m_a++; }

  void inc_b() { m_b++; }
};
Salin selepas log masuk

Kod pemasangan untuk fungsi inc_b ialah:

foo::inc_b():
    mov eax, DWORD PTR [rdi+4]      # eax = this->m_b
    lea edx, [rax+1]                # edx = eax+1
    mov DWORD PTR [rdi+4], edx      # this->m_b = edx
    ret
Salin selepas log masuk

Dalam kod ini, penunjuk "ini" tersirat dihantar dalam daftar rdi dan nilai disimpan 4 bait di dalam objek, seperti yang ditentukan oleh penyusun.

Atas ialah kandungan terperinci Bagaimanakah Objek Disimpan dan Diakses dalam Perhimpunan x86?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan