Índice de matriz fuera de límite en C

Por queC se diferencia en caso de que el índice de matriz quede fuera del límite

#include <stdio.h>
int main()
{
    int a[10];
    a[3]=4;
    a[11]=3;//does not give segmentation fault
    a[25]=4;//does not give segmentation fault
    a[20000]=3; //gives segmentation fault
    return 0;
}

Entiendo que está intentando acceder a la memoria asignada al proceso o subproceso en caso dea[11] oa[25] y se está saliendo de los límites de la pila en caso dea[20000].

¿Por qué el compilador o el enlazador no dan un error? ¿No son conscientes del tamaño de la matriz? Si no, ¿cómo funcionasizeof(a) ¿funciona correctamente?

Respuestas a la pregunta(9)

Su respuesta a la pregunta