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