Why two separate options have been considered for gcc, -mtune and -march? I wonder if anybody can give an example application of using these options while they are different. By -mtune the code is optimized for one specific processor, what does this optimization mean? gcc changes the assembly instructions specified by -march and will turn them into the processor specified by -mtune? So why do we need -mtune? We can compile by -march from the beginning.