深圳做网站企业,最新领导班子,做网站市场,jquery做的装修网站师从黑马程序员
内存分区模型
内存大方向划分为4个区域
1、代码区#xff1a;存放函数体的二进制代码#xff0c;由操作系统管理的
2、全局区#xff1a;存放全局变量环和静态变量以及常量
3、栈区#xff1a;由编译器自动分配释放#xff0c;存放函数的参数值#…师从黑马程序员
内存分区模型
内存大方向划分为4个区域
1、代码区存放函数体的二进制代码由操作系统管理的
2、全局区存放全局变量环和静态变量以及常量
3、栈区由编译器自动分配释放存放函数的参数值局部变量等
4、堆区由程序员分配和释放若程序员不释放程序结束时由 操作系统回收
程序执行前
在程序编译后生成了exe可执行文件未执行该程序前分为两个区域
代码区
存放CPU执行的机械指令就是写的代码
代码区是共享的共享的目的是对于频繁被执行的程序只需要在内存中有一份代码即可
代码区是只读的使其只读的原因是防止程序意外地修改了它的指令
全局区
全局变量静态变量static关键字字符串常量const修饰的全局变量全局常量
该区域的数据在程序结束后由操作系统释放
注不在全局区的有局部变量const修饰的局部变量局部常量
程序运行后
栈区
由编译器自动分配释放存放函数的参数值局部变量等
注不要返回局部变量的地址栈区开辟的数据由编译器自动释放
#include iostream
using namespace std;//不要返回局部变量的地址
//栈区开辟的数据由编译器自动释放int *func()
{int a10;//局部变量 存放在栈区栈区的数据在函数执行完后自动释放return a;//返回局部变量的地址
}int main()
{//接受func函数的返回值int *pfunc();cout*pendl;return 0;
}输出结果 堆区
由程序员分配释放若程序员不释放程序结束时由操作系统回收
在C中主要利用new在堆区地区开辟内存
#include iostream
using namespace std;int *func()
{//利用new关键字 可以将数据开辟到堆区//指针 本质也是局部变量。放到栈上指针保存的数据是放在堆区int *pnew int (10);return p;
}int main()
{// 在堆区开辟数据int *pfunc();cout*pendl;return 0;
}
注利用new关键字可以创建堆区的数据。数据创建好之后并不是把数据本身返回给你而是把堆区创建数据的地址返回给你所以用指针接收这个地址
new操作符
C中利用new操作符在堆区开辟数据
堆区开辟的数据。由程序员手动开辟手动释放利用操作符delete
语法new 数据类型
利用new创建的数据会返回该数据对应的类型的指针
#include iostream
using namespace std;//1、new的基本语法
int *func()
{//在堆区创建整型数据//new返回是 该数据类型的指针int *p new int (10);return p;
}void test01()
{int *pfunc();cout*pendl;cout*pendl;//堆区的数据 由程序员管理开除程序员管理释放//如果想释放堆区的数据利用关键字deletedelete p;//cout*pendl; //内存已经被释放再次访问就是非法操作会报错
}
//2、在堆区利用new开辟数组
void test02()
{//创建10整型数据的数组在堆区int *arr new int [10];//10代表数组中有10个元素for(int i0;i10;i){arr[i]i100;//给10个元素赋值 100~109}for(int i0;i10;i){coutarr[i]endl;}//释放堆区数组//释放数组的时候要加[]才可以delete [] arr;}int main()
{test01();test02();return 0;
}输出结果 若有侵权请联系作者