Я разрабатываю операционную систему, и вместо того, чтобы программировать ядро, я проектирую ядро. Эта операционная система ориентирована на архитектуру x86, а моя цель — на современные компьютеры. Расчетное количество требуемой оперативной памяти составляет 256 МБ или более.
Каков хороший размер стека для каждого потока, работающего в системе? Должен ли я попытаться спроектировать систему таким образом, чтобы стек мог автоматически расширяться при достижении максимальной длины?
Я думаю, если я правильно помню, что страница в оперативной памяти составляет 4 КБ или 4096 байт, и мне это не кажется большим. Я определенно вижу моменты, особенно при использовании большого количества рекурсий, когда я хотел бы иметь более 1000 целых чисел в ОЗУ одновременно. Теперь реальным решением было бы, чтобы программа делала это с помощью malloc
и управляла своими собственными ресурсами памяти, но на самом деле я хотел бы узнать мнение пользователей по этому поводу.
Достаточно ли 4k для стека с современными компьютерными программами? Должен ли стек быть больше? Должен ли стек автоматически расширяться для размещения любых типов размеров? Меня это интересует как с практической точки зрения разработчика, так и с точки зрения безопасности.
4k слишком много для стека? Рассматривая обычное выполнение программы, особенно с точки зрения классов в C++, я заметил, что хороший исходный код имеет тенденцию malloc/new
использовать данные, которые ему нужны, когда создаются классы, чтобы свести к минимуму количество данных, перебрасываемых при вызове функции.
Чего я даже не касался, так это размера кэш-памяти процессора. В идеале я думаю, что стек должен находиться в кеше, чтобы ускорить работу, и я не уверен, нужно ли мне этого добиваться, и сможет ли процессор справиться с этим за меня. Я просто планировал использовать обычную скучную старую оперативную память для тестирования. Я не могу решить. Какие есть варианты?