I don't agree on your first point
Code:
int main(int argc, char* argv[])
{
	time_t t1,t2;
	long n = 1000000000;
	int i = 0;
	(void) time(&t1);
	for( i = 0; i < n;  ++i);
	(void) time(&t2);
	printf("time for for( i = 0; i < n;  ++i); = %f\n", (double) ((double)t2-(double)t1));
	(void) time(&t1);
	for( i = 0; i < n;  i++);
	(void) time(&t2);
	printf("time for for( i = 0; i < n;  i++); = %f\n", (double) ((double)t2-(double)t1));
	return 0;
}
Does not give consistent output. Try running the above program multiple times and you will see that it toggles between which time is more.

With Point 3 it always the necessity to be doing so.

I guess if you are writing a thousand lines of codes then it hardly matter couple of CPU cycles and practically you don't get a loop for even greater than 1000 or else you should design your code a bit better.