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