Nic*_*ynt 9 size stack operating-system kernel osdev
我正在开发一个操作系统而不是编程内核,我正在设计内核.该操作系统面向x86架构,我的目标是现代计算机.估计所需的RAM数量为256Mb或更多.
使每个线程的堆栈在系统上运行的好大小是多少?我是否应该尝试以这样的方式设计系统:如果达到最大长度,堆栈可以自动扩展?
我想如果我没记错,RAM中的页面是4k或4096字节,这对我来说似乎不是很多.我绝对可以看到时间,特别是在使用大量递归时,我希望一次在RAM中有超过1000个积分.现在,真正的解决方案是让程序通过使用malloc和管理自己的内存资源来实现这一点,但实际上我想知道用户对此的意见.
4k足够大,可以用于现代计算机程序的堆栈吗?堆栈应该大于那个吗?堆栈是否应自动扩展以适应任何类型的大小?从实际开发人员的角度和安全角度来看,我对此感兴趣.
堆栈是4k太大了吗?考虑到正常的程序执行,特别是从C++中的类的角度来看,我注意到良好的源代码倾向于malloc/new创建类时所需的数据,以最小化函数调用中抛出的数据.
我甚至没有得到的是处理器缓存的大小.理想情况下,我认为堆栈将驻留在缓存中以加快速度,我不确定是否需要实现此目的,或者处理器是否可以为我处理它.我只是计划使用常规无聊的旧RAM进行测试.我无法决定.有什么选择?
bog*_*bog 10
堆栈大小取决于您的线程正在做什么.我的建议:
顺便说一句,x86页面大小通常是4k,但它们不一定是.你可以使用64k或更大的尺寸.较大页面的通常原因是避免TLB未命中.我再次将其作为内核配置或运行时参数.