zoukankan      html  css  js  c++  java
  • C++——代码运行过程详解

    #include <iostream>
    using namespace std;
    
    int a = 0;//初始化的全局变量:保存在数据段
    char *p1;//未初始化的全局变量:保存在BSS段
    
    int main()
    {
        int b;//未初始化的局部变量:保存在栈上
        char s[] = "abc";//"abc"为字符串常量保存在常量区;数组保存在栈上,
        并将常量区的"abc"复制到该数组中。这个数组可以随意修改而不会有任何隐患,
        而"123"这个字符串依然会保留在静态区中。
    
        char *p2;//p2保存在栈上
        char *p3 = "123456";//p3保存在栈上,"123456"保存在data区的read-only部分
        //注意:如果令p3[1] = 9; 则程序崩溃,指针可以访问但不允许改变常量区的内容
        //声明了一个指针p3并指向"123456"在静态区中的地址,事实上,p3应该声明为
        char const *,以免可以通过p3[i]='
    '这一类的语法去修改这个字符串的内容。如果这样
        做了,在支持“常量区”的系统中可能会导致异常,在“合并相同字符串”的编译方法下会导致其它
        地方的字符串常量古怪地发生变化。
    
        static int c = 0;//初始化的静态局部变量:保存在数据区(数据段)
    
        p1 = (char *)malloc(sizeof(char) * 10);//分配的10字节区域保存在堆上
        p2 = (char *)malloc(sizeof(char) * 20);//分配的20字节区域保存在堆上
    
        strcpy(p1, "123456");
        //"123456"放在常量区,编译器可能会将它与p3所指向"123456"优化成一个地方
    
        return 0;
    }

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

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

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

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

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

  • 相关阅读:
    陈应松《母亲》
    黄灯:一个农村儿媳眼中的乡村图景
    喝完茶为什么嘴里是甜的
    俗语一千条
    XtraBackup完整备份与增量备份的原理
    李嘉诚:90%考虑失败 关注细节
    redo和undo的区别
    tar命令
    自增锁引发的悲剧
    各版本 MySQL 并行复制的实现及优缺点
  • 原文地址:https://www.cnblogs.com/yrm1160029237/p/10386251.html
Copyright © 2011-2022 走看看