程序中内存分配

 

程序中内存分配

程序中各部分在内存中的分配如下图:

 

先来熟悉一下,上图出现的几个重要的概念。

:程序在运行时(而不是在编译时候)分配的内存空间

栈:为函数的运行而分配的局部变量、函数参数、返回数据、返回地址等分配的内存。

 代码区: 静态代码在内存中的存储区。所有类成员函数或者非成员函数的代码。

全局数据: 程序在编译时候,就已经初始化或赋值的全局变量、常量及静态数据

 

通常定义 一个数组,不管这个数组是局部的(栈中分配)还是全局的(在全局数据区分配),它的大小在程序是已知道的。因为必须用一个常数对数组的大小进行声明。

但是编写程序时候,并不能总是能确定所需要的数组的大小,需要在程序运行时从系统中获取内存。

程序在编译和链接时候不能确定这种需要在程序运行时候才能确定而获取的内存空间的大小。这种内存需求可能随着程序的运行而时大时小,这种在运行时申请的内存就是堆内存。

堆可以看做是按照要求进行分配的资源或者内存池。

数组名本身(没有方括号和其内下标),实际上是一个内存地址,表示数组所在内存存储空间的首地址。而一个拥有内存的指针完全可以被看做是一个数组,而且是位于堆内存中的数组,其性质和作用是和 位于栈中的数组是一样的。

 

转载于:https://www.cnblogs.com/zhangshufeng/archive/2011/10/11/2207756.html

猜你喜欢

转载自blog.csdn.net/weixin_33795093/article/details/93532294