C++——代码运行过程详解

 

#include <iostream>
using namespace std;

int a = 0;//初始化的全局变量:保存在数据段
char *p1;//未初始化的全局变量:保存在BSS段

int main()
{
    int b;//未初始化的局部变量:保存在栈上
    char s[] = "abc";//"abc"为字符串常量保存在常量区;数组保存在栈上,
    并将常量区的"abc\0"复制到该数组中。这个数组可以随意修改而不会有任何隐患,
    而"123"这个字符串依然会保留在静态区中。

    char *p2;//p2保存在栈上
    char *p3 = "123456";//p3保存在栈上,"123456\0"保存在data区的read-only部分
    //注意:如果令p3[1] = 9; 则程序崩溃,指针可以访问但不允许改变常量区的内容
    //声明了一个指针p3并指向"123456\0"在静态区中的地址,事实上,p3应该声明为
    char const *,以免可以通过p3[i]='\n'这一类的语法去修改这个字符串的内容。如果这样
    做了,在支持“常量区”的系统中可能会导致异常,在“合并相同字符串”的编译方法下会导致其它
    地方的字符串常量古怪地发生变化。

    static int c = 0;//初始化的静态局部变量:保存在数据区(数据段)

    p1 = (char *)malloc(sizeof(char) * 10);//分配的10字节区域保存在堆上
    p2 = (char *)malloc(sizeof(char) * 20);//分配的20字节区域保存在堆上

    strcpy(p1, "123456");
    //"123456\0"放在常量区,编译器可能会将它与p3所指向"123456"优化成一个地方

    return 0;
}

BSS段 :通常是指用来存放程序中 未初始化的全局变量、静态变量(全局变量未初始化时默认为0)的一块内存区域

数据段 :通常是指用来存放程序中 初始化后的全局变量和静态变量

代码段 :通常是指用来存放程序中 代码和常量

堆 :通常是指用来存放程序中 进程运行时被动态分配的内存段 ( 动态分配:malloc / new,者动态释放:free / delete)

栈 :通常是指用来存放程序中 用户临时创建的局部变量、函数形参、数组(局部变量未初始化则默认为垃圾值)

 

转载于:https://www.cnblogs.com/yrm1160029237/p/10386251.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值