Bu out optimize az ya da çok örnek kod ile Casting a function pointer to another type üzerine açıklama talebi cevabı "iyi" derleyici my_callback_helper()
fonksiyonu optimize etmek mümkün olmalıdır ama buldum diyoryardımcı işlevlerini
struct my_struct;
void my_callback_function(struct my_struct* arg);
void do_stuff(void (*cb)(void*));
static void my_callback_helper(void* pv)
{
my_callback_function(pv);
}
int main()
{
do_stuff(&my_callback_helper);
}
https://gcc.godbolt.org onu ve yardımcı fonksiyonunu yapar hiçbir derleyici her zaman just a jump to my_callback_function()
(-O3) olsa bile oluşturulan alır:
my_callback_helper:
jmp my_callback_function
main:
subq $8, %rsp
movl $my_callback_helper, %edi
call do_stuff
xorl %eax, %eax
addq $8, %rsp
ret
Yani sorum şu: Standartlarda derleyicilerin yardımcıyı ortadan kaldırmasını engelleyen bir şey var mı?
Deneyimlerimde, derleyiciler, işlev işaretçisinin değeri derleme zamanında belirlense bile, işlev işaretçisi çağrılarında satır içi iş yapmada zayıf bir iş yapma eğilimindedir. Satır içi anahtar kelimeye atlamayı deneyebilirsiniz. Bildiğim kadarıyla, standartta optimizasyonu önleyen hiçbir şey yok. – Lundin