转自:http://wenzongliang.iteye.com/blog/1866629

操作系统启动程序时会加载程序代码到内存(叫程序的代码区),然后创建进程PCB为进程分配内存资源(数据区,32系统为4GB)c/c++程序的数据区被c/c++分为5个区,他们分别是全局/静态存储区、常量存储区、栈、堆、自由存储区。

   全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。

  常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改。

  栈,在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

  堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。

  自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。

以一小段代码为例,提几个问题

#include "iostream"
using namespace std;
void ss(int a)
{
int b=5;
cout<<b+a<<endl;

}
int main()
{
ss(5);

int * p=new int;

delete p;
return 0;
}

1、这个EXE一运行必然要占用一块内存,这块内存是连续的吗?

2、既然调用了函数,一定有一块内存吧。内存是在这个EXE之内吗?

3,自由存储是一个概念吗

4、int * p=new int; 这句话开辟的内存地址在EXE的范围内吗?

5、是什么时候产生的?是程序一运行的时候?还是调用函数的时候-

--------------------------------------

1. exe运行的时候,系统会创建一个进程,同时会分配一块独立的内存空间给该进程,这个内存空间在32位系统上是从0x00000000到0xFFFFFFFF, 4G的空间大小。

2. CPU时间分配的单位是线程,所有的函数都是在一个线程里面执行的,当线程创建时,系统会分配一段内存和寄存器给这个线程,线程就可以调用函数了。内存是在进程内存空间里面。exe是一个文件的概念,只有当exe运行之后,系统创建的exe的进程实例之后,才会分配内存,所有内存是在exe的进程实例中的,在exe之内的说法不妥。

3.自由存储不是一个概念。一般而言,自由存储是指CRT(C运行时库)通过malloc,free函数管理的内存。特指通过new,delete管理的内存。但是在部分编译器的实现上这两块内存都是同一种管理方式。

4. int* p = new int 如上述,在exe的进程空间内存空间里面。

产生的时机如2所讲,是在一个线程创建的时候。

在C++程序中内存是分为5块的,注意区分

1.

2.

3.自由存储

4.全局/静态存储

5.文字常量存储

最新文章

  1. oracle的round函数和trunc函数
  2. plist的读取和写入
  3. 在CSS中定义a:link、a:visited、a:hover、a:active顺序
  4. 手动封装js原生XMLHttprequest异步请求
  5. scss编译
  6. Chromuim proxy Api 提取代里proxy调用Chrome隐身多窗口 多COOKIE 工具
  7. Ms sql pivot unpivot
  8. Markdown 语法说明 (简体中文版)
  9. Java compiler level does not match the version of the installed Java project facet.问题
  10. Fedora 19修改主机名
  11. C语言漫谈(二) 图像显示 Windows和Linux
  12. eclipse plugin 导出插件包
  13. AJax的异步请求
  14. spark中数据的读取与保存
  15. Ubuntu系统的安装Sublime3
  16. webpack dev server 和 sublime text 配合时需要注意的地方
  17. 封装一个 员工类 使用preparedStatement 查询数据 (2) 使用 arrayList 集合
  18. 通过Socket让远程电脑执行脚本
  19. Vs2017_创建项目引用Core2.2报错找不到
  20. Selenium IDE

热门文章

  1. 浅析struct device结构体
  2. day10_7.10 函数的嵌套等
  3. 怎么安装python3
  4. k8s集群搭建 2019
  5. div层的滑入滑出实例
  6. leetcode组合总和 Ⅳ 解题路径
  7. 求数组前K个大的数
  8. 洛谷 P1919 A*B Problem升级版
  9. javaSript 处理电脑和浏览器pc端缩放对页面的影响
  10. 微信小程序之页面打开数量限制