c++内存

众所周知C++内存分为五个区域:栈、堆、全局/静态存储区、字符串常量区和代码区。
1. 栈:由系统进行内存的管理。主要存放函数的参数以及局部变量。在函数完成执行,系统自行释放栈区内存,不需要用户管理。
2. 堆:使用malloc或者new进行申请。堆内存需要用户申请和释放,若不手动释放(内存泄漏),程序结束后由系统回收。
3. 全局/静态存储区:存储全局变量和静态变量。静态存储区内的变量在程序编译阶段已经分配好内存空间并初始化。
此块内存在程序的整个运行期间都存在,它主要存放静态变量、全局变量和常量。
4. 字符串常量区:字符串常量的存储位置。
5. 代码区:存放程序体的二进制代码。函数编译后存在该区。

int a = 0;  //静态全局变量区
char *p;    //静态全局变量区,编译器默认初始化为NULL
void main()
{
    int b; //栈
    char s[] = "abc";//栈
    char *p2 = "123456";//123456在字符串常量区,p2在栈上
    static int c =0; //c在静态变量区,0为文字常量,在代码区
    const int d=0; //栈
    static const int d;//静态常量区
    p = (char *)malloc(10);//分配得来得10字节在堆区。
    strcpy(p, "123456"); //123456放在字符串常量区,编译器可能会将它与p2所指向的"123456"优化成一个地方
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值