If we were talking about a dinosaur like FORTRAN your calculation would be correct, but with a dynamic language like C memory usage is a non-trivial calculation, becasue typical automatic variables are allocated when the function is called, and in the general case compiler has no way of knowing exactly how that will happen.
For a worst-case example, let's look at a recursive function, like factorial (this one is slightly contrived to illustrate the issue):
int fac(int n)
{
int result;
if (n == 1)
result = 1;
else
result = n * fac(n - 1);
return result;
}
This function will allocate an int (2 bytes on the arduino) each time it is called. If my calling function calls
fac(7) the function will be called 7 times (6 times it will call itself) requiring a total of 7x2=14 bytes of RAM for the various copies of the variable result, but the compiler has no way of knowing this at compile time.
-j