Мне нужен произвольно большой буфер в Linux / C / C ++

В основном мне нужен сколь угодно большой стек. Я знаю, что это невозможно, но могу ли я выделить для этого несколько терабайт своего виртуального адресного пространства? Я хотел бы иметь возможность начать с самого начала и продвигаться по буферу настолько далеко, насколько мне нужно, а Linux может загружать страницы из физической памяти по мере необходимости. Возможно ли что-то подобное? Будет ли это иметь такую ​​же производительность, как и простое распределение буфера? Будет ли способ сообщить Linux, что вы закончили с памятью, как только вы вставите стек?

РЕДАКТИРОВАТЬ: Я хочу этого, потому что я хочу оптимизировать рекурсивный / параллельный алгоритм, который выделяет много памяти для каждого вызов. Malloc слишком медленный для меня, и я не хочу, чтобы все потоки спотыкались друг о друге внутри блокировок malloc. Таким образом, в основном это будет мой собственный стек времени выполнения наряду с настоящим (по одному для каждого потока).

На самом деле, пока стек выполнения достаточно велик, он должен быть достаточно хорошим. Есть ли способ узнать / убедиться в размере стека? В 64-битном адресном пространстве достаточно места для нескольких потоков, чтобы выделить гигабайты данных в стеке. Это выполнимо?

Похоже, pthread_attr_setstacksize может работать для новых потоков, но это мало помогает, если вас можно вызвать из любого потока ...

6
задан Chris 29 November 2011 в 20:54
поделиться