堆和栈在物理内存中的什么位置?

cre*_*tor 4 c++ memory heap-memory stack-memory

我在谷歌上读到了一些关于堆和堆栈的内容,但大多数答案只是说它的概念描述和差异。

我对其他事情很好奇。

  1. 正如标题所说,物理内存上的堆和栈在哪里?

  2. 它们的尺寸如何?例如,我的台式电脑使用 12 GB 内存,那么 Heap 是多少?堆栈大小是多少?

  3. 谁提出了这两种不同类型的概念?

  4. 我可以操纵堆和堆栈的分配吗?如果它们各自占用 50% 的内存(如果堆占用 6 GB 内存,在我的情况下堆栈也占用 6 GB),我可以调整它们的大小吗?

Pas*_*uoq 5

  1. 正如标题所说,物理内存上的堆和栈在哪里?

自从 CPU 使用MMU在虚拟内存和物理内存之间添加间接层以来,堆和堆栈就一直存在于物理内存中的任何位置。自从现代操作系统实现了ASLR以来,堆和堆栈也出现在虚拟内存中的任何位置。

  1. 它们的尺寸如何?例如,我的台式电脑使用 12 GB 内存,那么 Heap 是多少?堆栈大小是多少?

两者都是从小规模开始,并根据需求而增长。在 Unix 上,最大堆栈大小由 设置ulimit -s,堆大小受 限制ulimit -d。您可以使用 来查看 Unix 操作系统上默认设置的限制ulimit -a

  1. 谁提出了这两种不同类型的概念?

我敢打赌这至少可以追溯到 20 世纪 60 年代。维基百科有 1960 年的参考资料。

  1. 我可以操纵堆和堆栈的分配吗?如果它们各自占用 50% 的内存(如果堆占用 6 GB 内存,在我的情况下堆栈也占用 6 GB),我可以调整它们的大小吗?

正如已经说过的,它们会自行调整大小,或者更准确地说,它们会在操作系统和用户设置的限制内按需增长。ulimit如果您使用的是 Unix 和 bash,请参阅帮助。