не оптимизированный кандидат в объединение констант
Компилятор vc "честно" генерирует все три строковые константы, а gcc и icl только две из них: "hello,world!\n"
и "i say hello, world!\n". На то, что первая строка совпадает с концом второй, ни один из компиляторов не обратил внимание. Это тем более печально, что язык Си не позволяет управлять размещением переменных в памяти и классический ассемблерный трюк с передачей указателя на середину строки здесь не проходит. Можно, конечно, поднатужиться и написать:
s[]="i say hello, world!\n"; // размещаем
строку в
памяти
printf(&s[6]);
// выводим подстроку
printf(&s[6]);
// выводим подстроку
printf(s);
// выводим всю строку целиком