In C++, which is better i>-1 or i>=0

1.5k views Asked by At

This might be a silly question to ask, but this kind of optimization is sometimes boost performance of your application. Here I am asking specifically for C++, because the way C++ compile code is a lot different that c# or Java.

The question is which one performs better, if variable i is int.

  1. i > -1
  2. i >= 0

I am looking for performance in terms of memory block or registers required and CPU cycles required for both conditions.

Thanks in advance.

3

There are 3 answers

6
Aracthor On BEST ANSWER

In assembly language, both are on the same structure:

  1. i > -1

    cmp   [register with i value],-1
    jg    [somewhere]
    
  2. i >= 0

    cmp   [register with i value],0
    jge   [somewhere]
    

According to used jump flags, the instruction jg make two flags comparaisons (ZF = 0 and SF = OF) but jge does only one (SF = OF).

So I'm tempted to say that both use almost same registers and CPU cycles, with maybe a very little quicker comparaison for i >= 0.

0
angrykoala On

Well, according to logic > operation may be "cheaper" than >=, but I guess you are compiling with Optimization option enabled, so probably the compiler do whatever he wants to optimize your code, so I would say that doesn't matter, even if one is really faster, probably the compiler change it to the best option

0
onemasse On

When writing a for loop it could be beneficial to convert it from for (i = 0; i < 1000; i++) to for (i = 1000; i > 0; i--) because on some architectures the compiler can skip the compare instruction as a flag will be set when i reaches 0. On modern architectures I'm not sure it matters.