Will my compiler ignore useless code?

前端 未结 9 1286
情深已故
情深已故 2021-02-06 21:53

I\'ve been through a few questions over the network about this subject but I didn\'t find any answer for my question, or it\'s for another language or it doesn\'t answer totally

9条回答
  •  情书的邮戳
    2021-02-06 22:07

    Well, your variables i and prevSpec_OilCons, if not used anywhere will be optimized away, but not your loop.

    So if your code looks like:

    static void Main(string[] args)
    {
        int[] TestRunTime = { 1, 2, 3 };
        int i = 0;
        for (int j = 0; j < TestRunTime.Length; j++)
        {
    
        }
        double prevSpec_OilCons = 0;
        Console.WriteLine("Code end");
    }
    

    under ILSpy it will be:

    private static void Main(string[] args)
    {
        int[] TestRunTime = new int[]
        {
            1,
            2,
            3
        };
        for (int i = 0; i < TestRunTime.Length; i++)
        {
        }
        Console.WriteLine("Code end");
    }
    

    Since the loop has couple of statements, like comparison and increment, it could be used for implementing somewhat short delay/wait period. (although not a good practice to do so).

    Consider the following loop, which is an empty loop, but it will take a lot of time to get executed.

    for (long j = 0; j < long.MaxValue; j++)
    {
    
    }
    

    The loop in your code, is not a dead code, as far as dead code is concerned, the following is a dead code, and will be optimized away.

    if (false)
    {
        Console.Write("Shouldn't be here");
    }
    

    The loop, will not even be removed by the .NET jitters. Based on this answer

提交回复
热议问题