Kha*_*led 2 c++ stack heap-memory
我正在学习 C++ 并执行此代码
#include<stdio>
using namespace std;
int main(){
char* buffer = new char[5];
printf("%p", &buffer); // 000000000061fe10
cout<<endl;
printf("%p", buffer); // 0000000000796b700
}
Run Code Online (Sandbox Code Playgroud)
给了我 2 个完全分离的内存位置,我的意思是大约 150 万字节远,那么为什么堆大小应该是 5 个字节,对吗?char size * 5. 堆向下增长(从 0xFFF ... 到 0x0000 ...) 堆下有堆栈,所以差异应该小得多,所以在这种情况下什么是内存布局。什么是我在上面的解释中不完全理解的
内存的布局取决于操作系统、程序加载器(通常与操作系统一起提供)、有关可执行文件的规则以及提供给链接器的请求。您尚未指定您使用的是哪个操作系统,因此不可能有明确的答案。
但是,内存地址是任意的。如果工匠布置他们的工具、他们的说明、他们的零件和他们的工作空间,他们可以按照他们想要的任何方式安排它们。不要求堆栈靠近堆。很可能,堆已经被赋予了一个高地址,以便在虚拟内存空间中有足够的空间让它向下增长,或者它下面的东西向上增长。由于虚拟内存是通过从虚拟地址到物理地址的任意映射创建的,因此对其布局方式几乎没有限制——程序可以在这里使用几个地址,在另一个地方使用几个地址,在另一个地方使用几个地址,并且可以在它们之间留下很多未使用的空间,而那些未使用的空间不会消耗任何内存,因为它没有映射到物理内存。
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |