C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
And: When a method terminates, its memory is forgotten from the stack and the pointer is readjusted.
Next: This program contains eight important methods: A1 through D1, and A2 through D2.
Info: When A1 is called, it calls B1 and then B1 calls C1. On the other hand, when A2 is called, it simply calls B2, C2, and D2.
Important: The A2 method should consume less stack space. It has a shorter stack.
C# program that compares method call depths
using System;
using System.Diagnostics;
class Program
{
const int _max = 100000000;
static void Main()
{
A1();
A2();
var s1 = Stopwatch.StartNew();
for (int i = 0; i < _max; i++)
{
A1();
}
s1.Stop();
var s2 = Stopwatch.StartNew();
for (int i = 0; i < _max; i++)
{
A2();
}
s2.Stop();
Console.WriteLine(((double)(s1.Elapsed.TotalMilliseconds * 1000 * 1000) /
_max).ToString("0.00 ns"));
Console.WriteLine(((double)(s2.Elapsed.TotalMilliseconds * 1000 * 1000) /
_max).ToString("0.00 ns"));
Console.Read();
}
static int _i = 1;
static void A1()
{
B1();
}
static void B1()
{
if (_i == 0)
throw new Exception();
C1();
}
static void C1()
{
if (_i == 0)
throw new Exception();
D1();
}
static void D1()
{
if (_i == 0)
throw new Exception();
}
static void A2()
{
B2();
C2();
D2();
}
static void B2()
{
if (_i == 0)
throw new Exception();
}
static void C2()
{
if (_i == 0)
throw new Exception();
}
static void D2()
{
if (_i == 0)
throw new Exception();
}
}
Output
3.54 ns Nested calls
0.96 ns Sequential calls
Also: The Exception throws in the program are to confuse the inliner in the JIT.
However: This is likely not useful except on performance-critical parts of important programs.