प्रत्येक चर प्रारंभ: इसलिए
.locals init ([0] int32 x,
[1] int32 y,
[2] int32 a,
[3] int32 b,
[4] int32 c)
IL_0000: ldc.i4.2 // push 2 to the stack
IL_0001: stloc.0 // load local variable 0 from stack (x = 2)
ये अभियान क्रमिक रूप से होता है,
int x = 2;
मूल्य की आवश्यकता होती है ढेर पर होना होगा:: (1 अब तक आवश्यक ढेर आकार) अधिकतम स्टैक आकार की आवश्यकता अभी भी 1 है,
int y = 3;
int a = 4;
int b = 5;
int c = 6;
और जब यह यह करने के लिए आता है:
Console.WriteLine(x + y + a + b + c);
किसी भी दो चर जोड़ने के लिए, 2 के ढेर आकार की जरूरत है:
IL_000b: ldloc.0 // copy to stack x, max stack size required is still 1.
IL_000c: ldloc.1 // copy to stack y, max stack size required is 2 now.
IL_000d: add // execute add, will cause the sum x + y to be on stack
IL_000e: ldloc.2 // copy to stack a
IL_000f: add // execute add... (adds a to the result of x + y)
....
अंतर आईएल आप जब uncomment विधि जोड़ें के नीचे है।
जब एक विधि बुला, आप ढेर (जिसका अर्थ है, अगर विधि जोड़ें गैर स्थिर किया गया था, इसकी घोषणा के प्रकार के उदाहरण सूचक ढेर पर धकेल दिया जाना चाहिए)
पर उदाहरण के संदर्भ पुश करने के लिए की जरूरत है फिर, प्रत्येक तर्क जिसे विधि में पारित करने की आवश्यकता है उसे स्टैक पर भी धक्का दिया जाना चाहिए।
इसलिए, यह आपके मामले में ऐड विधि के पैरामीटर की संख्या है जो अधिकतम स्टैक आकार को परिभाषित करता है। इस विधि जोड़े में एक पैरामीटर जोड़ें, और आप उस अधिकतम ढेर आकार 5 की वृद्धि होगी देखेंगे:
// method is static so no need to push an instance pointer to the stack
IL_001a: ldc.i4.s 10 // push to stack
IL_001c: ldc.i4.s 20 // push to stack
IL_001e: ldc.i4.s 30 // push to stack
IL_0020: ldc.i4.s 40 // push to stack
IL_0022: call int32 Program::Add(int32,
int32,
int32,
int32)
IL_0027: call void [mscorlib]System.Console::WriteLine(int32)
मैं थोड़ा शीर्ष पर शब्दों tweak चाहते हैं - यह * घोषणा * ढेर अंतरिक्ष का उपयोग करता है नहीं है, यह * प्रारंभिक * है। –
@Damien_The_Unbeliever समीक्षा और सुधार के लिए धन्यवाद। इसे ठीक करना –
तो क्या यह आईएल की तरह लाइन से उत्पन्न नहीं है। मेरा कहना है कि एक्स = 2 एक स्टैक स्पैक लेता है तो अन्य मूल्य घोषणा क्यों नहीं? क्या ऐसा लगता है कि कंपाइलर को यह पता चला कि उसे केवल जोड़ों की आवश्यकता है ताकि ढेर में 2 स्थान enogh होगा। – TBAG