. Ini adalah pendekatan yang sangat dioptimumkan, kerana akses daftar jauh lebih cepat daripada akses memori. Dalam kes ini, fungsi itu akan memperuntukkan memori (sama ada pada timbunan atau timbunan) untuk data dan mengembalikan penunjuk ke lokasi memori itu. Pemanggil kemudiannya bertanggungjawab untuk menguruskan memori yang berkaitan dengan data yang dikembalikan, biasanya dengan membebaskannya apabila ia tidak lagi diperlukan untuk mengelakkan kebocoran memori. Nilai: rax
Nilai -nilai ini hanya wujud untuk tempoh panggilan fungsi. Sebaik sahaja fungsi selesai dan mengembalikan kawalan kepada pemanggil, daftar yang memegang nilai pulangan mungkin akan ditimpa. Oleh itu, anda tidak boleh bergantung pada kegigihan nilai pulangan selepas panggilan fungsi berakhir melainkan jika anda secara eksplisit menyimpannya dalam pembolehubah. Jika xmm0
atau
. Sekiranya memori diperuntukkan pada timbunan (mis., Dalam skop fungsi), data hanya sah sehingga fungsi kembali, kerana bingkai timbunan muncul. Percubaan untuk mengakses data ini selepas panggilan fungsi akan membawa kepada tingkah laku yang tidak ditentukan, yang berpotensi merosakkan program atau merosakkan data. Lokasi adalah pelaksanaan yang ditakrifkan dan sangat bergantung kepada pengkompil. Mengaksesnya secara langsung tidak selamat dan menjadikan kod anda tidak mudah alih. Ia melanggar abstraksi yang disediakan oleh mekanisme panggilan fungsi. Pengkompil boleh mengoptimumkan kod dengan cara yang mengubah lokasi nilai pulangan atau bahkan menghapuskan keperluan untuk menyimpannya dalam ingatan sama sekali.
Semasa anda mungkin dapat mencari lokasi melalui alat debugging atau dengan memeriksa kod pemasangan, bergantung pada pendekatan ini sangat rapuh dan dapat memecahkan bahkan perubahan kecil pada pengkompil, tetapan pengoptimuman, atau kod itu sendiri. Sebaliknya, sentiasa bekerjasama dengan nilai pulangan melalui pembolehubah yang sesuai yang diberikan selepas panggilan fungsi. Nilai yang kembali dalam daftar jauh lebih cepat daripada mengembalikannya melalui ingatan. Akses mendaftar jauh lebih cepat kerana jarak daftar dengan unit pemprosesan CPU. Akses memori melibatkan pengambilan data dari RAM, proses yang lebih perlahan. Inilah sebabnya penyusun mengutamakan jenis data kecil yang kembali (seperti integer dan terapung) dalam daftar. Sekiranya memori diperuntukkan pada timbunan, terdapat overhead peruntukan memori dinamik dan deallocation. Walau bagaimanapun, mengembalikan struktur besar melalui petunjuk boleh menjadi lebih cekap daripada menyalin keseluruhan struktur kembali kepada pemanggil, terutama jika strukturnya besar. Perdagangan melibatkan overhead pengurusan memori berbanding kos menyalin sejumlah besar data. Pertimbangan yang teliti terhadap faktor -faktor ini adalah penting untuk mengoptimumkan prestasi.
Atas ialah kandungan terperinci Di manakah nilai pulangan fungsi bahasa C yang disimpan dalam ingatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!