我看到大多数的虚拟内存图都是类似下面这个图,我以为先后顺序应该也是这样的,也就是堆栈在内存空间地址总是大于程序数据、代码的。但是我在VS上打印,这个先后顺序却是不固定的。
我看到大多数的虚拟内存图都是类似下面这个图,我以为先后顺序应该也是这样的,也就是堆栈在内存空间地址总是大于程序数据、代码的。但是我在VS上打印,这个先后顺序却是不固定的。
在操作系统里面,你的程序的代码段跟数据段有各自的独立的空间,由系统帮你映射到一个连续的空间内,所以你看到的好像是一个连续的唯一地址。其实你如果从较小的地址向较大逐一访问的化,你并不能从数据段跨越到代码段,或从代码段跨越到数据段,你大概率会碰到未映射的地址,然后产生缺页错误而崩溃。
所以两个段谁在前谁在后,完全是看怎么映射的,用户也不需要关心这个。
3 回答1.1k 阅读✓ 已解决
1 回答2.3k 阅读
1 回答975 阅读✓ 已解决
4 回答763 阅读
1 回答840 阅读
1 回答872 阅读
1 回答643 阅读
Windows下面,堆栈都是分了很多段的。不是只有一个连续的地址段。
这张图想表达的意思其实是,堆是往上增长的,栈是往下增长的。但是相对位置关系并不固定,跟具体的操作系统实现有关。