стек против обнаружения переполнения кучи

В системе с разбивкой по запросу, такой как linux, где страницы могут быть ~ 4k от того, что я прочитал, она обеспечивает защиту, проверяя, превышает ли размер стека или кучи количество страниц, отданных каждой. КОГДА я создаю две переменные

char *s = (char *) malloc(100);   
char sa[100];

В цикле for я могу записать s [i] = 'c'; почти 4000 раз, прежде чем появится ошибка памяти тогда как с sa [i] = 'c'; РЕДАКТИРОВАТЬ: я получаю ошибку сегментации или ошибку разбивания стека для любых значений, превышающих размер массива.

Я могу понять, что в первом случае есть ошибка страницы, и он видит, что больше страниц не было выделено в кучу, следовательно, нарушение памяти. Но что происходит во втором случае, проверяет ли gcc во время выполнения все предварительно выделенные переменные?
РЕДАКТИРОВАТЬ: я публикую весь код ниже

int main(int argc,char* argv[]){
char *s = (char *) malloc(20);
char sa[400] = {0};
int i ,count;
printf(" enter the number of chars to write: ");
scanf("%d",&count);
for (i=0;i<count;i++){
printf("%d\n",i);
sa[i] = 'a';
//s[i] = 'a';
}
free(s);

}
7
задан dasman 14 August 2011 в 17:56
поделиться