В основном мне нужен сколь угодно большой стек. Я знаю, что это невозможно, но могу ли я выделить для этого несколько терабайт своего виртуального адресного пространства? Я хотел бы иметь возможность начать с самого начала и продвигаться по буферу настолько далеко, насколько мне нужно, а Linux может загружать страницы из физической памяти по мере необходимости. Возможно ли что-то подобное? Будет ли это иметь такую же производительность, как и простое распределение буфера? Будет ли способ сообщить Linux, что вы закончили с памятью, как только вы вставите стек?
РЕДАКТИРОВАТЬ: Я хочу этого, потому что я хочу оптимизировать рекурсивный / параллельный алгоритм, который выделяет много памяти для каждого вызов. Malloc слишком медленный для меня, и я не хочу, чтобы все потоки спотыкались друг о друге внутри блокировок malloc. Таким образом, в основном это будет мой собственный стек времени выполнения наряду с настоящим (по одному для каждого потока).
На самом деле, пока стек выполнения достаточно велик, он должен быть достаточно хорошим. Есть ли способ узнать / убедиться в размере стека? В 64-битном адресном пространстве достаточно места для нескольких потоков, чтобы выделить гигабайты данных в стеке. Это выполнимо?
Похоже, pthread_attr_setstacksize может работать для новых потоков, но это мало помогает, если вас можно вызвать из любого потока ...