Why is "X" in a for (int i=0;i<X;i++) changing my program size?

All i’m doing is putting blank space on the serial monitor with

int bs = 5;// blank space;)
for (int i = 0;i < bs;i++){
Serial.println();
}

There is a lot more before and after this snippet but this is just pure curiosity.
This is no a Leonardo by the way.
When bs = 1 the program size is 21622 and dynamic memory is 1432.
When bs = 2 the program size is 21626.
When bs = 3 the program size is 21630.
When bs = 4 the program size is 21634.
When bs = 5 the program size is 21638.
When bs = 6 the program size is 21642.
When bs = 7 the program size is 21632.???
When bs = 8 the program size is 21632.
When bs = 9 the program size is 21632.
Let’s skip ahead a bit.
When bs = 32767 the program size is 21632 and dynamic memory is 1432.
When bs = 32768 the program size is 19170 and dynamic memory is 900.(32,767 is the maximum “int” size so I can see it running into problems but that’s questionable.)

I was only planning on using 5 or 6 but for some reason the question popped in my head “Does it make a difference?” and as you can see it does.

My question is, what’s with the 4 byte difference in the beginning, no change for a while and then the sudden drop at the end?

compiler's optimization. for constant and low iteration count it changes the for loop to a series of commands

So are you saying that it would be the same as me just writing Serial.println(); 6 times if bs = 6; instead of using a counter?

TimShoo:
So are you saying that it would be the same as me just writing Serial.println(); 6 times if bs = 6; instead of using a counter?

you can check it, if you generate lst file.
example command line
arduino-1.8.7/hardware/tools/avr/bin/avr-objdump -h -S Blink.elf > Blink.lst

TimShoo:
and then the sudden drop at the end?

when bs becomes negative nothing lines are added at all.