???????????????????????pthread_attr_t???????????????????????????????????????????stackaddr?????Сstacksize?? ??????????????

int pthread_attr_setstack(pthread_attr_t *attr?? void *stackaddr?? size_t stacksize);
// ???stackaddr ?????????????????????????malloc????mmap???????????????????????????????stackaddr?????????????????????????

?????????????????????????????????????????????С8MB?????????

int pthread_attr_setstacksize(pthread_attr_t *attr?? size_t stacksize);
// ???stacksizeС??16384????λ????

???????????API??????????????????stacksize???????pthread_attr_t?е???????????????????????????????????????????????????????????stacksize?????????????????????????С??????????

int pthread_attr_setguardsize(pthread_attr_t *attr?? size_t guardsize);

????????????????β????????????????????????С???????ó????????????????У?????????????? SIGSEGV ??????????????? ??????δ?????????????????PAGESIZE?????????????mm->start_stack??????????????????????????????????д????task_struct?У??????????attr?е?stackaddr?????????task_struct->thread-> sp??sp???struct pt_regs?????y???????????????????????????????????

??????????????儷?????????????????????????????????????????????????????????????á????????????????С?????pthread_attr_t ?У?????С???????????ж???????磬???????????????????????????????С????????????????С??

????ps?????????д???????????λ???????????????????????лл??