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