We're not talking about the stack as a data structure used within a program. We're talking about the fact that C and C++ have to be based on a stack during function calls, since by language definition functions can be recursive: a function can call itself, perhaps indirectly through other functions. In most traditional languages (such as PL/1, FORTRAN and COBOL) that is explicitly prohibited. The stack has to hold CPU registers during a recursive call, and the automatic variables. Because function calling is such a vital part of the performance of C-based programs, it has to be very efficient.