Как правило, стеки потоков начинаются на границах страниц, и любой
указанный размер округляется к следующей границе страницы. К вершине
стека добавляется страница без разрешения на доступ, чтобы переполнение
стека вызвало посылку сигнала SIGSEGV потоку, вызвавшему
переполнение.
Если определяется стек, то поток должен создаваться с типом
PTHREAD_CREATE_JOINABLE. Этот стек не может быть освобожден,
пока не произойдет выход из pthread_join() этого потока,
потому что стек потока не может быть освобожден, пока поток не закончится.
Единственный надежный способ закончить такой поток - вызов pthread_join().
В общем случае нет необходимости выделять пространство для стека потоков.
Библиотека потоков выделяет один мегабайт виртуальной памяти для стека
каждого потока без резервирования пространства выгрузки. (Библиотека
использует опцию MAP_NORESERVE для mmap, чтобы
выделить память).
Каждый стек потоков, созданный библиотекой потоков, имеет красную
зону. Библиотека создает красную зону, добавляя к вершине стека страницу,
позволяющую обнаружить переполнение стека. Эта страница не действительна
и вызывает ошибку защиты памяти, когда к ней обращаются. Красные зоны
добавляются ко всем автоматически распределенным стекам вне зависимости
от того, был ли определен размер стека приложением или используется
размер по умолчанию.
Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке,
посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных
администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости
индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.
Каждый, кто оформит подписку, получает бонус- объёмные наклейки на системный блок и подарки: с одним из
первых выпусков журнала в 2012 году- диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную
версию журнала в pdf-формате.
Подробнее о проведении акции вы можете прочитать на
странице сайта.