For space it all depends on what the procedure's being used for. Defining a procedure will take up 3 bytes for tokens (DEF, PROC and ENDPROC) plus however many bytes are taken up by the name and parameters plus 2 bytes for each colon (or 3 bytes if a separate line is used). So for a simple PROCA:
Code:
DEF PROCA:PRINT:ENDPROC
The overhead would be 3 bytes for tokens, 2 bytes for the colons and one byte for the name = 6 bytes.
Also each call of the procedure would take up 1 byte for token, plus the length of the name (so in the above case 2 bytes), a total of 3 bytes.
Using a GOSUB would take up 1 byte for tokens (RETURN), 3 bytes for a line and 1 byte for a colon, e.g.:
Code:
1000PRINT:RETURN
Which equals 5 bytes. Advantage GOSUB, by one byte.
Now to call a GOSUB, BBC BASIC actually hashes the number for its own internal reasons into 4 bytes no matter how long the number is (&8d to signify it's a line number and 3 bytes to describe the line number). So to call the GOSUB, at a minimum would take 1 byte token + 4 bytes line number which equals 5 bytes. Advantage procedure, by 2 bytes. (An ON GOSUB would take up an extra byte for the ON token and for each comma.)
So, the totals are:
PROC: 6 bytes + 3 bytes for each call
GOSUB: 5 bytes + 5 bytes for each call