程序的内存存储的内容如图所示
静态存储区主要分配全局变量和静态变量
从栈上分配:
栈上存放函数参数值 局部变量值等 在执行函数调用时 系统在栈上自动为函数内部的局部变量及形参分配内存,函数执行结束时,自动释放这些内存。
从堆上分配:
在程序运行期间,用动态内存分配函数来申请的内存都是从堆上分配的,动态内存的生存期由程序员自己来决定。
动态内存分配函数void* malloc (unisigned int n) 申请n个字节的内存空间
常用的方式例如 int *p=(int*)malloc(10*sizeof(int));//申请了10个int型的空间 也就是10个int大小的整型动态一维数组
calloc(int number, int n) 申请number*n大小字节的空间
栈向下生长 这个下指的是低地址端 而堆是向上生长 这个上指的是高地址端(这玩意和图片无关哈)
另外 栈的空间比较小 是M级 而堆比较大 是G级 所以当我们申请大容量的内存时还是使用堆
网友评论