Where is Heap and Stack on Physical Memory?
我通过谷歌阅读了一些关于堆和堆栈的内容,但大多数答案只说明了它的概念描述、差异。
我对其他事情很好奇。
正如标题所说,物理内存上的堆和堆栈在哪里?
它们的尺寸如何?例如,我在我的台式电脑上使用12千兆字节的内存,那么heap值是多少?堆栈大小是多少?
这两种不同类型的概念是谁提出的?
我可以操作堆和堆栈的分配吗?如果它们每个占用50%的内存(如果堆占用6G字节的内存,在我的例子中,堆栈也占用6G字节),我可以调整它们的大小吗?
as title says, Where is Heap and Stack on Physical Memory?
自从CPU让MMU在虚拟内存和物理内存之间添加一层间接寻址以来,堆和堆栈就一直存在于物理内存中的任何地方。自从现代操作系统实现了ASLR以来,堆和堆栈也一直存在于虚拟内存中的任何地方。
How is their size? For example, I use 12 giga byte memory at my desktop PC, then how much is Heap? and how much is Stack size?
两者都是从小处做起,按需增长。在Unix上,最大堆栈大小由
Who made these 2 different type concept?
我敢打赌,这至少可以追溯到20世纪60年代,维基百科有1960年的参考资料。
Can I manipulate Heap & Stack's allocation? if they take 50% of memory each, (if Heap take 6 giga byte memory, Stack take 6 giga byte too in my case), can I resize them?
如前所述,它们会根据需要调整自己的大小,或者更准确地说,在操作系统和用户设置的限制范围内增长。如果您使用的是unix和bash,请参阅
1。它可以无处不在。即使在物理内存之外,因为在应用程序方面也没有这样的东西。用户区中的所有内容都使用虚拟内存,可以映射到
2。它们都是动态增长的,区别在于速度和大小限制:
堆通常被认为较慢。它是根据应用程序要求分配的。它和
RAM 的数量一样大,甚至更大(分页)。堆栈更快,因为它通过简单移动堆栈指针"分配"。它通常有大小限制。例如,在C++中,这个限制被设置在编译阶段(ECDOX1对GCC,EDCOX1,0,8,EDCOX1,9,在MSVC上)。
堆栈通常要小得多,很容易溢出(这就是我们所说的堆栈溢出)。例如,在C++中,你很可能无法做到这一点:
1 2 3 4 5 | int main() { int large_array[1000000]; return 0; } |
因为:
虽然这很好:
1 2 3 4 5 | int main() { int* large_array = new int[1000000]; //allocated from heap return 0; } |
三。一些非常聪明的人。
4。仔细阅读第1-3点,你就会知道答案。