LINUX.ORG.RU

О pthread и переменных


0

0

В моей проге некоторая часть переменных - в стеке треда. По умолчанию ядра (у меня юникс) размер стека - 65536. Увеличиваю размер стека до 1М. И все равно, переменные, которые больше 65536 - вызывают ошибку, если не убрать их из стека и перевести в heap. Отчего так, никто не подскажет?

anonymous

хм..видимо руки кривые..

p.s. нормально сформулируй вопрос, докажи, что это не так..

anonymous
()
Ответ на: комментарий от anonymous

кажись анонимус прав

>65536

под линуксом таких дефолтных стеков не бывает. в твоём случае должно быть 2Мб

cvv ★★★★★
()
Ответ на: комментарий от anonymous

Руки, может, и кривые, но как анонимус анонимусу: учись вежливости, и люди, глядишь, подобреют кругом.

есть процедурина: pthread_attr_setstacksize() и соответственно pthread_attr_getstacksize().

Для отдельно взятого треда стек свой, верно? Устанавливаю размер 2М - дохлый номер.

Для этих процедур надо инициализировать сперва переменную типа pthread_attr_t. Так что вопрос следующий: что еще находится в этой структуре аттрибутов, и где это посмотреть?

anonymous
()
Ответ на: комментарий от cvv

платформа FreeBSD 5.3
GCC v.3.4.2

pthread_attr_t attr; //pthread attributes
size_t stack_size; //pthread stach_size
pthread_attr_init(&attr); //init attributes

pthread_attr_getstacksize(&attr, &stack_size);
printf("thread stack size: %u\n", stack_size);

//здесь выдается 65536


if(pthread_attr_setstacksize(&attr, 1048576)!=0)
{
printf("Error set stack_size: %u!\n", errno);
}
pthread_attr_getstacksize(&attr, &stack_size);
printf("thread stack size: %u\n", stack_size);

//Это пример установки стек-сайза на 1М.

Для задач менее тяжеловесных мне всегда хватало 64К. Теперь стала делать кой-чего посложней - и застряла... нет, можно, конечно, все переменные выделять динамически, но мне интересно, отчего так...

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.