¿Cómo funciona la directiva .NET IL .maxstack?

Me gustaría saber cómo funciona realmente .maxstack. Sé que no tiene que ver con el tamaño real de los tipos que está declarando, sino con el número de ellos. Mis preguntas son:

¿Esto se aplica solo para la función, o para todas las funciones que estamos solicitando?incluso si es solo para la función donde se está declarando .maxstack, ¿cómo saber qué es maxstack si tiene ramificación? ¿Ve a ver todas las "rutas" y devuelve el valor máximo posible?¿Qué pasa si lo configuro en 16 y en realidad hay 17 variables?¿Hay una penalización demasiado grande si la configuro en 256?