您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> 关于内存分配的问题

关于内存分配的问题

来源:网络整理     时间:2016/8/28 18:58:47     关键词:

关于网友提出的“ 关于内存分配的问题”问题疑问,本网通过在网上对“ 关于内存分配的问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 关于内存分配的问题
描述:

#include
using namespace std;
int g1 = 0,g2 =0;
int _tmain(int argc, _TCHAR* argv[])
{
static int s1=0,s2=0;
int v1=0,v2=0;
int *p = new int();
cout <<"全局变量"<< &g1 <<" " <<&g2<< endl;
cout <<"静态变量"<< &s1 <<" " <<&s2<< endl;
cout << "局部变量"<<&v1 <<" " <<&v2<< endl;
cout <<"堆区地址"<< p <<" " <<"栈区变量"<< &p<<>
delete p;
system("pause");
return 0;
}

 关于内存分配的问题
给一个程序分配内存,不是从高址到底址依次是:
栈区
堆区
静态变量区
全局变量区
文字常量区
数据区
代码区
为什么我在main函数里定义的局部变量v1,v2的地址小于全局变量和静态变量呢?堆区地址也是。。
求问这个堆区和栈区是怎么分配的,难道不是固定在这个内存块的高址区域吗?
解决方案1:

书上说的是原理,而且是从16位实地址模式下的内存布局原理。 但是实现原理的具体实现方法有很多,既然没有一个世界统一的法律规定所有实现必须使用这种模式,那么凭什么你测试的结果要和书上一致? 再说了, 32位下代码段和数据段加载自可执行文件,那么为了加载方便,一般操作系统不会特意调整它们的位置关系, 但是堆和栈都是操作系统动态分配的内存(甚至都不是物理内存,只是保留一段虚拟地址给程序使用),那么为什么操作系统要特意去配合你书上(也不知道谁写的)的内容去安排地址空间?

解决方案2:

引用 5 楼 Idle_ 的回复:
书上说的是原理,而且是从16位实地址模式下的内存布局原理。 但是实现原理的具体实现方法有很多,既然没有一个世界统一的法律规定所有实现必须使用这种模式,那么凭什么你测试的结果要和书上一致? 再说了, 32位下代码段和数据段加载自可执行文件,那么为了加载方便,一般操作系统不会特意调整它们的位置关系, 但是堆和栈都是操作系统动态分配的内存(甚至都不是物理内存,只是保留一段虚拟地址给程序使用),那么为什么操作系统要特意去配合你书上(也不知道谁写的)的内容去安排地址空间?

正解,如何分配内存是操作系统实现的策略,况且C++有规定类似的东西吗?反正我是没有听说过。
再然后我们程序员只关心类似大端小端的东西,内存分配的地址值高低对程序没有任何影响,
我们根本无需关心这个(不包括嵌入式,因为我不了解)
以上介绍了“ 关于内存分配的问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3637851.html

相关图片

相关文章