Global Variables and reading from the serial, memory management

It will cause dynamic allocations, weather or not that's an issue to you is a different question.

F() uses PSTR, so you can do this instead:

//Inside a function
char *test = PSTR( "TEST" );
char *test2 = PSTR( "TEST2" );

//Or globally
char test[] PROGMEM = "TEST";
char test2[] PROGMEM = "TEST2";

stuff_progmem( char *str ){
 //Access str using pgm_read_byte funtions.
}

EDIT: modified the code to show both local and global declarations.