- 论坛徽章:
- 3
|
按照通常的设计, 栈向下增长, 堆向上增长.
比如按照用户空间 3G 来看, 栈在 3G 下一个随机地址开始, 堆在 bss 上一个随机地址开始. 这样空间的利用相对完全(想象一下它们能碰头的情况).
如果将栈设计在 bss 之上, 堆设计在栈之上.
那么这时的问题在于,
1. 栈空间大小固定多少合适? 如果栈向下增长的话栈顶可能会碰到 bss 段的.
2. 如果把栈设计为向上增长, 那堆的起始点设计在哪里合适? 其实是同一个问题: 栈空间要固定吗, 如果固定, 固定为多少?
所以传统的通常设计, 反正堆起始点之上, 栈起始点之下就是堆和栈的空间. 如果栈顶碰到堆顶, 那就说明空间不够用了. 这种设计相对灵活.
其实这仍然是比较扯淡的问题. 实际上 Linux 32 位系统通常将用户的栈空间限制为 10 MB. 不过可以解除这个限制.
另外, 栈和堆之间还有 mmap 区域, 用来 map 各种共享库. 所以一般栈顶堆顶碰头的情况是... sigh...
不想扯淡面试官有没有人品问题. 不过 LZ 面试失败, 一句话, 就是面试官看你不爽, 不爽, 不爽. 这种不爽, 可能是因为 LZ 的技术问题, 也可能是因为 LZ 的人品问题, 还可能是因为 LZ 的相貌问题. 不过根据 LZ 这个题目来看, 技术问题原因导致失败的可能性比较大一些.
|
|