程序的内存及new操作符的使用

程序的内存模型

  1. 代码区(共享只读性):存放函数体的二进制代码,由操作系统管理

  2. 全局区:存放全局变量,静态变量,常量
    (程序运行前)

  3. 栈区:由编译器自动分配释放,存放函数的参数值和局部变量

  4. 堆区:由程序员自行分配或释放,在程序结束后,由操作系统统一回收
    (程序运行时)

全局区

int c=10;   //全局变量
const int d=10;   //const修饰的全局变量,即全局常量
int main()
{
    static int a=10;   //静态变量,可以被修改,但只能在函数体内被使用
    //常量
    cout<<"hello world";   //字符串常量
    const int b=10;   //局部常量
    return 0;
}

栈区

//程序运行时形参会被存储在栈区,函数结束时被清空
int* f(int b){
   b=100;
   int a=10;
   return &a;
}
//上述写法可以得到a的地址,但其上的数据已被清空,无意义
//该指针第一次被使用时会得到编译器的保留值,但仅此一次
//在编写代码时应当注意避免返回一个非主函数内的指针

堆区

int *f(){
    int *p=new int[10];
    //通过new开辟出的空间,存储于堆区,在程序运行完成后被释放
    //存放变量p的空间属于栈区
    return p;
}

new的使用

int *f(){
    int *p=new int[10];   
    //此处意为开辟一个int型数组空间,并将该数组的首地址赋给p
    //数组有十个元素
    return p;   
}
int main()
{
    int *p=f();
    delete []p   //清空数组内的数据时必须在数组名前加[]
    return 0;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Norman_wen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值