В системе с постраничным спросом, такой как linux, где страницы могут быть ~ 4k от того, что я прочитал, это обеспечивает защиту, проверяя, превышает ли размер стека или кучи количество страниц, предоставляемых каждой.Когда я создаю две переменные
char *s = (char *) malloc(100);
char sa[100];
В цикле for я могу написать s[i] = 'c';
почти 4000 раз, прежде чем произойдет ошибка памяти, тогда как с sa[i] = 'c';
EDIT: я получу segmentation fault
или stack smashing
ошибка для чего-либо большего, чем размер массива.
Я могу понять, что в первом случае происходит сбой страницы, и он видит, что больше не было выделено страниц для кучи, а значит, и нарушение памяти.Но что происходит во втором случае, когда 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);
}