LINUX.ORG.RU

История изменений

Исправление Moisha_Liberman, (текущая версия) :

Я только добавлю к Вашему комменту, что данное правило соблюдается и для многопоточных приложений. Проверить это легко. Например:

/** 
 * Убрана проверка на ошибки, чтоб пример не загромождать.
 * Для компиляции: gcc st_size.c -o st_size -lpthread
 */
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/resource.h>

int main(int argc, char *argv[]) {
	pthread_attr_t attr;
	size_t stacksize;
	struct rlimit rlim;

	pthread_attr_init(&attr);
	pthread_attr_getstacksize(&attr, &stacksize);
	getrlimit(RLIMIT_STACK, &rlim);
	printf("%zd\n", (size_t) rlim.rlim_cur);
	printf("%zd\n", stacksize);
	pthread_attr_destroy(&attr);

	return 0;
}

Т.е., у нас stack size будет одинаков что для основого потока, что для потоков-потомков. Этому есть объяснение в man 3 pthread_create. И там же есть объяснение по поводу размера стека для случая ulimit -s unlimited в реализации потоков через NPTL (дефолтная реализация в наши дни).

Если вдруг захочется повыставлять свои размеры стека для потоков, то тогда man 3 pthread_attr_setstacksize.

**Но вот лучше бы без таких извращений. ** Хоть С и не ограничивает, но тут зарутеть раз плюнуть.

Исходная версия Moisha_Liberman, :

Да. Именно!

Я только добавлю к Вашему комменту, что данное правило соблюдается и для многопоточных приложений. Проверить это легко. Например:

/** 
 * Убрана проверка на ошибки, чтоб пример не загромождать.
 * Для компиляции: gcc st_size.c -o st_size -lpthread
 */
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/resource.h>

int main(int argc, char *argv[]) {
	pthread_attr_t attr;
	size_t stacksize;
	struct rlimit rlim;

	pthread_attr_init(&attr);
	pthread_attr_getstacksize(&attr, &stacksize);
	getrlimit(RLIMIT_STACK, &rlim);
	printf("%zd\n", (size_t) rlim.rlim_cur);
	printf("%zd\n", stacksize);
	pthread_attr_destroy(&attr);

	return 0;
}

Т.е., у нас stack size будет одинаков что для основого потока, что для потоков-потомков. Этому есть объяснение в man 3 pthread_create. И там же есть объяснение по поводу размера стека для случая ulomit -s unlimited в реализации потоков через NPTL.

Если вдруг захочется повыставлять свои размеры стека для потоков, то тогда man 3 pthread_attr_setstacksize.

**Но вот лучше бы без таких извращений. ** Хоть С и не ограничивает, но тут зарутеть раз плюнуть.