Rumah >pembangunan bahagian belakang >C++ >Mengapakah RAX Ditolak ke Tindanan Sebelum Panggilan Ekor dengan `std::function`?
Mengapa RAX Ditolak ke Tindanan Sebelum Panggilan Ekor?
Output pemasangan untuk fungsi f mengambil argumen fungsi std:: mendedahkan operasi yang menarik: sejurus sebelum panggilan ekor, RAX ditolak ke timbunan. Tingkah laku ini tidak diperhatikan dalam panggilan ekor ringkas tanpa pembungkus fungsi std::.
Pertimbangan Penjajaran
Sebab menolak RAX adalah berakar umbi dalam 64-bit ABI, yang memerlukan timbunan dijajarkan kepada 16 bait sebelum arahan panggilan. Arahan panggilan menolak alamat pemulangan 8-bait ke tindanan, melanggar penjajaran. Untuk membetulkannya, pengkompil mesti menjajarkan semula tindanan kepada gandaan 16 bait sebelum panggilan ekor.
Penjajaran Tindanan yang Cekap
Menolak nilai tidak peduli seperti RAX ialah cara yang cekap untuk mencapai penjajaran tindanan kerana:
Dengan menolak RAX, pengkompil memenuhi keperluan penjajaran tanpa mengganggu kelakuan fungsi.
Atas ialah kandungan terperinci Mengapakah RAX Ditolak ke Tindanan Sebelum Panggilan Ekor dengan `std::function`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!