Установить размер области защиты стека потока
#include <pthread.h>int pthread_attr_setguardsize( pthread_attr_t *attr,size_t guardsize );
pthread_attr_t
, определяющую атрибуты создаваемого потока. Подробнее см. pthread_attr_init().libc
Функция pthread_attr_setguardsize() устанавливает размер области защиты стека потока guardsize через атрибуты создаваемого потока attr.
Если guardsize равен 0
, создаваемые с помощью attr потоки не будут иметь защиты от переполнения стека; в противном случае защитная область будет иметь размер guardsize байт. Штатный размер guardsize можно узнать передав _SC_PAGESIZE
в sysconf().
Атрибут guardsize контролирует размер защитной страницы стека потока, которая помогает защитить стек от случайного переполнения. При этом размер стека будет иметь избыточный размер, равный guardsize байт. Если переполнение стека настолько велико, что переполняет и защитную область стека, то резко повышается вероятность поступления в поток сигнала SIGSEGV
.
Данный атрибут предоставляется по следующим причинам:
POSIX 1003.1 X/Open Systems Interfaces Extension
Если разработчик создает стек самостоятельно (используя атрибут stackaddr объекта attr; см. pthread_attr_setstackaddr()), то атрибут guardsize игнорируется. При этом, однако, защита стека не используется.
Если менеджер памяти находится в режиме работы с физической памятью, атрибут guardsize также игнорируется.
pthread_attr_getguardsize(), pthread_attr_init(), pthread_attr_setstackaddr(). sysconf()
Предыдущий раздел: Описание API системной библиотеки