C function stores it in a data structure in C RAM somewhere. Repeat as necessary. If the last step is forgotten, we have a memory leak. If this method is used to run C programs on an OS that compiles Lisp or Java to native machine code, I expect that the performance penalty for running C programs this way will be comparable to the performance penalty for running a program in an interpreted language. Every memory access by the C code, except to most local variables and parameters, must be bounds-checked.
Interpreted languages vary in efficiency.
All of these are off the top of my head, and I haven't checked any of them . I'm assuming there's no performance penalty for writing the bounds-checking code in Lisp instead of C or assembly. This is somewhat optimistic. It might be possible to reduce this performance penalty in a few ways. It would slow down smaller accesses, but I believe them to be less frequent in modern programs.