2010-09-28 11 views
6

क्या अधिभारित कार्यों को कॉल करने में कोई अतिरिक्त रनटाइम ओवरहेड है?क्या कार्य ओवरलोडिंग में डेल्फी में रनटाइम ओवरहेड है?

(मैं डेल्फी के लिए विशेष रूप से इस मामले में पूछने जवाब सभी संकलित भाषाओं के लिए समान नहीं है,) मुझे नहीं लगता कि के रूप में है कि संकलन समय के दौरान सुलझाया जाना चाहिए

, लेकिन आप यकीन है कि कभी नहीं हो सकता आप कर सकते हैं ?

उत्तर

19

बेशक आप सुनिश्चित हो सकते हैं, क्योंकि यह documented है। संकलक समय पर संकलित करने वाला संकलक है, इसलिए डेल्फी में अधिभारित कार्यों को कॉल करने पर कोई अतिरिक्त ओवरहेड नहीं है।

var 
    j: Integer; 
    st: string; 

procedure DoNothing(i: Integer); overload; 
begin 
    j := i; 
end; 

procedure DoNothing(s: string); overload; 
begin 
    st := s; 
end; 

procedure DoNothingI(i: integer); 
begin 
    j := i; 
end; 

procedure TForm2.Button1Click(Sender: TObject); 
const 
    MaxIterations = 10000000; 
var 
    StartTick, EndTick: Cardinal; 
    I: Integer; 
begin 
    StartTick := GetTickCount; 
    for I := 0 to MaxIterations - 1 do 
    DoNothing(I); 
    EndTick := GetTickCount; 
    Label1.Caption := Format('Overlaod ellapsed ticks: %d [j:%d]', [EndTick - StartTick, j]); 
    StartTick := GetTickCount; 
    for I := 0 to MaxIterations - 1 do 
    DoNothingI(I); 
    EndTick := GetTickCount; 
    Label1.Caption := Format('%s'#13'Normal ellapsed ticks: %d [j:%d]', [Label1.Caption, EndTick - StartTick, j]); 
end; 

परिणाम::

[संपादित करें]

मैं तुम्हारे लिए एक छोटे से परीक्षण किया था मेरी देव मशीन पर दोनों के लिए लगभग सभी समय 31 Ticks (मिलीसेकेंड), कभी कभी अधिभार केवल 16 टिक लेता है ।

alt text

+2

+1 आपने मुझे इसे हराया :) –

+0

दाएं। संकलन-समय ओवरहेड की एक (नगण्य) राशि है, लेकिन रनटाइम पर कोई नहीं। –

+2

संकलित कोड नाम के बारे में परवाह नहीं करता है लेकिन कॉल करने के लिए सही प्रक्रिया का पता नहीं है। चूंकि इस अनुवाद का नाम => पता संकलन समय पर किया जाता है, अंत में, रन टाइम पर, यह बिल्कुल अलग नाम होने जैसा ही होता है। –

3

ओवरलोडिंग संकलन समय (कोई भूमि के ऊपर) पर हल हो गई है, लेकिन अधिभावी भूमि के ऊपर है! virtualdynamic की तुलना में तेजी है:

http://docwiki.embarcadero.com/RADStudio/en/Methods

Win32, के लिए गतिशील
डेल्फी में बनाम आभासी आभासी और गतिशील तरीकों शब्दार्थ बराबर हैं।
हालांकि, वे रन टाइम पर विधि-कॉल प्रेषण के कार्यान्वयन में भिन्न होते हैं: आभासी विधियां गति के लिए अनुकूलित होती हैं, जबकि डायनामिक विधियां कोड आकार के लिए अनुकूलित होती हैं।

संबंधित मुद्दे