Сопрограммы с растущим стеком на C

#c #linux #mmap #coroutine

#c #linux #mmap #сопрограмма

Вопрос:

Я хочу использовать сопрограммы на C (Linux), но я не хочу тратить много места на каждую из них. Мне интересно выделить пространство для стека с помощью mmap() given MAP_GROWSDOWN , но я где-то читал, что это было сломано, знаете ли вы что-нибудь еще об этом?

Ответ №1:

но я не хочу тратить много места на каждую из них

Не беспокойтесь об этом. Ваша сопрограмма может иметь большой стек, но это не вызовет никаких проблем с производительностью или ресурсами, если стек фактически не используется. Логическим страницам памяти не будут назначены физические страницы до этого момента. И если это используется, значит, вам это было нужно тогда, не так ли?

Просто используйте стек приличного размера и покончите с этим.

Комментарии:

1. Итак, что вы говорите о том, что я должен выделить большое mmap отображение и что память не будет использоваться до тех пор, пока к ней не будут физически прикасаться?

2. Однако хочу предостеречь: вы можете исчерпать свое виртуальное адресное пространство, даже если не используете память.

3. @Sylvain, я понимаю это; к счастью, я ориентируюсь на 64-битные архитектуры.