初始化数据区(data) 未初始化数据区(bss) 常量区 栈区: 系统为每一个程序分配一个临时的空间, 局部变量,函数信息,函数参数,数组 栈区大小为:1M 在windows中可以扩展到10M 在linux中可以扩展到16M 堆区: 存储大数据,图片,音乐,视频 手动开辟 malloc 手动释放 free 栈区大小为:1M,我们来验证一下 intzhan[820...
动态分配内存就是在堆区开辟空间。 二、静态分配、动态分配 1. 静态分配 (1) 在程序编译时就确定了内存空间的大小和位置,如inta[10]。 (2) 必须事先知道所需空间的大小。 (3) 分配在栈区或全局变量区,一般以数组的形式。 (4) 按计划分配。 2. 动态分配 (1) 在程序运行过程中,根据需要大小自由分配所...
//free 使用方法intmain(){int*p=(int*)malloc(sizeof(int));//向堆区申请1个整型的空间if(p==NULL)return1;//申请失败的情况char*ptr="123";//在栈区开辟的空间free(ptr);//非法释放,会报错ptr=NULL;free(p);//合理释放p=NULL;//置空,避免野指针return0;} 非栈区申请的空间,不能释放,这点还...
malloc是 C 语言提供的一个动态内存开辟的函数,该函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。 如果开辟成功,则返回一个指向开辟好空间的指针。 如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。 返回值的类型是void*,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用...
堆区是用来进行动态内存分配的,像 malloc、calloc、realloc 这些动态内存函数开辟的空间就是在堆区上的,一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。分配方式类似于链表。5 5.数据段(静态区)6 数据段其实就是我们之前所说的静态区,静态区主要用来存放一些全局变量以及静态数据(如static...
我们已经掌握的内存开辟方式有: int val = 20;//在栈空间上开辟四个字节 char arr[10] = {0};//在栈空间上开辟10个字节的连续空间 但是上述的开辟空间的方式有两个特点: 空间开辟大小是固定的。 数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。
这种内存分配称为静态存储分配;有些操作对象只在程序运行时才能确定,这样编译时就无法为他们预定存储空间,只能在程序运行时,系统根据运行时的要求进行内存分配,这种方法称为动态存储分配。所有动态存储分配都在堆区中进行。 当程序运行到需要一个动态分配的变量或对象时,必须向系统申请取得堆中的一块所需大小的存储...
空间开辟⼤⼩是固定的。 数组在申明的时候,必须指定数组的⻓度,数组空间⼀旦确定了⼤⼩不能调整。 2.动态内存 为了解决静态内存开辟的内存空间固定的问题,C语言引⼊了动态内存开辟,让程序员⾃⼰可以申请和释放空间,就⽐较灵活了。 2.1 动态内存开辟函数 ...
strcpy(p1,"123456"); //123456放在常量区,编译器可能会将它与p3所向"123456"优化成一个地方。 } 三、堆和栈的理论知识 2.1申请方式 stack: 由系统自动分配。例如,声明在函数中一个局部变量int b;系统自动在栈中为b开辟空间 heap: 需要程序员自己申请,并指明大小,在c中用malloc函数 ...