2009-03-23 10 views
9

क्या कोई व्यक्ति जीसीसी के साथ उपयोग के लिए फास्टकॉल का उदाहरण उपयोग कर सकता है? यदि संभव हो तो आप फास्टकॉल का उपयोग किए बिना समकक्ष कॉल प्रदान कर सकते हैं और समझा सकते हैं कि वे अलग कैसे होंगे?फास्टकॉल जीसीसी उदाहरण

उत्तर

17

तरह से किसी दिए गए समारोह कॉल सी कोड में दिखाई देता है में कोई अंतर नहीं है कर रहे हैं। फंक्शन घोषणा में एकमात्र अंतर होगा। GCC manual में अधिक जानकारी है।

$ cat fastcall.c 
extern void foo1(int x, int y, int z, int a) __attribute__((fastcall)); 
extern void foo2(int x, int y, int z, int a); 

void bar1() 
{ 
    foo1(99, 100, 101, 102); 
} 

void bar2() 
{ 
    foo2(89, 90, 91, 92); 
} 

$ gcc -m32 -O3 -S fastcall.c -o - 
. 
. 
bar1: 
. 
.  
    movl $100, %edx 
    movl $99, %ecx 
    movl $102, 4(%esp) 
    movl $101, (%esp) 
    call foo1 
. 
. 
bar2: 
. 
. 
    movl $92, 12(%esp) 
    movl $91, 8(%esp) 
    movl $90, 4(%esp) 
    movl $89, (%esp) 
    call foo2 
+1

क्या आपको अंतर पर जोर देने के लिए पोस्ट-कॉल क्लीनअप दिखाने की ज़रूरत है? मैनुअल एक्स-रेफरी के लिए +1। –