unsigned char *nb_program_end(void);
nb_program_end returns the address of the first byte following the end of the program.
Consider a program containing a single line 10 PRINT. In fact, there is always an additional phantom line at the end which has line number 0 with the END token on it. So, the program looks like this in memory:
06 00 0a 00 NB_TOKEN_PRINT NB_TOKEN_EOL \n 00 00 00 00 NB_TOKEN_END NB_TOKEN_EOL
So, the program size is 12 bytes and the returned address points to the byte following the second NB_TOKEN_PAD