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

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

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

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]='n'这一类的语法去修改这个字符串的内容。如果这样
    做了,在支持“常量区”的系统中可能会导致异常,在“合并相同字符串”的编译方法下会导致其它
    地方的字符串常量古怪地发生变化。

    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)

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

 

原文链接: https://www.cnblogs.com/yrm1160029237/p/10386251.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/289976

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月15日 下午12:27
下一篇 2023年2月15日 下午12:27

相关推荐