C++面经:初始化全局变量和未初始化全局变量有什么区别

news2024/11/26 16:57:27

        全局变量初始化而且初始值不为0,那么这样的全局变量是放在内存的.data段的,如果全局变量初始值为0或者未初始化,那么这样的全局变量是放在.bss段的。

考点:

        考察C/C++语言内存模型,.data,.bss段存放的内容。

C语言内存模型(内存组织方式)

        C程序开发并编译完成后,要载入内存(主存或内存条)才能运行,变量名、函数名都会对应内存中的一块区域。

内存中运行着很多程序,我们的程序只占用一部分空间,这部分空间又可以细分为以下的区域:

1.程序代码区:存放函数体的二进制代码。

2.静态数据区(data area):也称全局数据区,包含的数据类型比较多,如全局变量、静态变量、一般常量、字符串常量

(1).全局变量区和静态变量区的存储是返回在一块的,初始化的全局变量和静态变量在一块区域。未初始化的全局变量和未初始化的静态变量在相邻的另一区域。

(2).常量区域包括字符串常量和一般常量存储在另一区域

注意:静态区的内存在程序结束后由系统释放。

3.堆区:一般由程序员分配和释放,若程序员不释放,则程序运行结束后由系统回收。malloc(),calloc(),free(),操作的就是这块内存。

注意:这里的堆区不同于数据结构的堆,堆区的分配方式倒是和数据结构的链表比较相似。

4.栈区:由系统自动分配释放,存放函数的参数值和局部变量的值等。其操作方式类似于数据结构中的栈。

5.命令形参区:存放命令型参数和环境变量的值,如通过main()传递的值。

注意:未初始化的全局变量的默认值是 0,而未初始化的局部变量的值却是垃圾值(任意值)。

    #include <stdio.h>
    #include <conio.h>
    int global;
    int main()
    {
        int local;
        printf("global = %d\n", global);
        printf("local = %d\n", local);
        getch();
        return 0;
     }

 

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    int a = 0;  // 全局初始化区(④区)
    char *p1;  // 全局未初始化区(③区)
    int main()
    {
        int b;  // 栈区
        char s[] = "abc";  // 栈区
        char *p2;  // 栈区
        char *p3 = "123456"; // 123456\0 在常量区(②),p3在栈上,体会与 char s[]="abc"; 的不同
        static int c = 0;  // 全局初始化区
        p1 = (char *)malloc(10),  // 堆区
        p2 = (char *)malloc(20);  // 堆区
        // 123456\0 放在常量区,但编译器可能会将它与p3所指向的"123456"优化成一个地方
        strcpy(p1, "123456");
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/533860.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows shell环境: 从git bash切换到msys2

文章目录 1. 目的2. msys2 环境 (Environment)3. 升级 MSYS2: 使用 pacman 滚动式升级整个系统4. 在 Windows Terminal 中增加显示 MSYS25. 使用 zsh6. VSCode 中的配置增加 MSYS2 终端配置 git 路径 7. 安装 C/C 依赖库安装 ag查询 bison 和 flex 的安装目录 8. References 1.…

ES6模块化规范

在没有ES6模块化规范前&#xff0c;有像AMD、CMD这样的浏览器模块化规范&#xff0c;还有像CommonJS这样的服务端模块化规范。 2015年&#xff0c;JS终于推出了官方的模块化规范&#xff0c;为了统一各种规范&#xff0c;我们简称ES6 模块化。 ES6目前作为JS的内置模块化系统&a…

Spring的创建和使用,存储和读取Bean总结

目录 Spring项目创建和使用流程 1.创建一个 Spring 项目 2.存储 Bean 3.读取 Bean ApplicationContext和BeanFactory的区别 通过注解存储 Bean对象 五大类注解的关系 Java程序标准分层 方法注解Bean 注入Bean对象的三种方式 1.属性注入 2.Setter注入 3.构造方法注入…

【Java数据结构】Map和Set

Map和Set 搜索树概念操作 - 查找操作 - 插入操作 - 删除cur没有左树&#xff08;cur.left null&#xff09;cur没有右树&#xff08;cur.right null&#xff09;cur既有左树也有右树&#xff08;最困难的情况&#xff09;替罪羊删除法 操作代码性能分析和 java 类集的关系 搜…

程序员困局:去大城市进大厂却买不了房,回老家又没有高薪工作…

对于在外打拼的程序员来说&#xff0c;难的是进大厂&#xff0c;而不是买不起房。 进大厂的程序员&#xff0c;能不能买得起房&#xff1f; 进大厂的程序员的薪资&#xff0c;还是相当可观的。以阿里P6为例&#xff0c;年薪50万&#xff0c;到手40万左右&#xff0c;刨去10万…

【C++学习】C++11——新特性 | 右值引用 | 完美转发

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《C学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; C11——新特性 | 右值引用 | 完美转发 &#x1f440;列表初始化&#x1f9b4; std::initializer_list…

收藏!网络行业主流的六大技术认证全科普

大家好&#xff0c;我是老杨。你的年终总结做完了没&#xff1f;还没做完&#xff0c;点击“年终总结”&#xff0c;拿个模板&#xff0c;快速完成。 很多人在年末都会有列一个新年愿望清单&#xff0c;写写来年想要完成的事情。 不少网工在这两年的就业环境之下&#xff0c;…

Nginx-部署2个vue项目(多个项目)-二级域名设置代理

前言 最近在实际开发过程中&#xff0c;需要在服务器部署2个项目。需要nginx二级域名。 开始时候在网上查了一圈&#xff0c;各有说法&#xff0c;不是很全&#xff0c;很头大。这里把自己成功的二级域名代理记录一下。 网上有很多文章说要该router.js文件&#xff0c;要该vu…

自动备份交换机的配置到远程服务器

环境 交换机配置修改后及时备份相关配置&#xff0c;每次配置变化后需要在1分钟后自动进行保存&#xff0c;并且将配置上传至FTP服务器&#xff1b;每隔30分钟&#xff0c;交换机自动把配置上传到FTP服务器 配置命令&#xff1a; [huawei]set save-configuration delay 1 //…

单片机外围电路:电阻之上下拉电阻

1.基础概念 上拉就是将不确定的信号通过一个电阻钳位在高电平&#xff0c;电阻同时起限流作用。下拉同理&#xff0c;也是将不确定的信号通过一个电阻钳位在低电平。 2.基础应用 上下拉电阻在数字电路中使用&#xff0c;为了好理解一点&#xff0c;可把上下拉电阻大致分为两种…

货币简史:从物物交换到数字货币

货币简史 1. 物物交换阶段2. 一般等价物阶段3. 信用货币阶段4. 电子货币阶段5. 数字货币阶段 金钱是什么时候产生的呢&#xff0c;这取决于你如何定义金钱。 费利克斯马丁&#xff08;FelixMartin&#xff09;名为《金钱:未授权的传记》(Money:An Unauthorized Biography)书中…

19c rac环境修改pubic, vip,scan ip步骤

19c rac环境第一次修改public、vip和scan ip&#xff0c;和11g还是稍有不同。首先说明下环境 具体步骤如下 1、修改public地址&#xff0c;关闭实例后使用root用户操作 [rootdb1 ~]# ./oifcfg getif bond0 172.20.30.0 global public bond2 100.100.100.0 global clust…

【JVM】JVM堆内存(heap)详解

文章目录 前言一、堆内存划分二、为什么移除永久代&#xff1f;三、分代概念四、为什么分代&#xff1f;五、为什么survivor分为两块相等大小的幸存空间&#xff1f;六、JVM堆内存常用参数七、垃圾回收算法&#xff08;GC&#xff0c;Garbage Collection&#xff09;八、垃圾收…

java 反射及代理模式初步学习

java 反射及代理模式初步学习 0. 什么是反射&#xff1f; Java的反射&#xff08;reflection&#xff09;机制是指在程序的运行状态中&#xff0c;可以构造任意一个类的对象&#xff0c;可以了解任意一个对象所属的类&#xff0c;可以了解任意一个类的成员变量和方法&#xf…

小程序组件

swiper swiper 和 swiper-item 结合使用&#xff0c;&#xff0c; swiper有默认高度 300rpx 属性&#xff1a; autoplay &#xff1a; 自动播放circular &#xff1a; 循环播放indicator-dots &#xff1a; 显示指示点indicator-active-color &#xff1a; 轮播选中的颜色 &…

SpringBoot整合钉钉消息推送(四十四)

从头开始&#xff0c;并不意味着失败&#xff0c;相反&#xff0c;正是拥抱成功的第一步&#xff0c;即使还会继续失败 上一章简单介绍了 SpringBoot 发送邮件(四十三), 如果没有看过,请观看上一章 钉钉消息推送&#xff0c; 官方文档: https://open.dingtalk.com/document/gr…

3.结构化的数学思想

前言 今天在复习概率论的公理化过程中&#xff0c;我发现它的公理其实也是人为定义的&#xff0c;为什么我会这么想呢&#xff1f;这是因为我曾听过严伯均在为什么诺贝尔奖没有数学讲曾说过数学是一门无法证伪的学科&#xff0c;甚至不能算是科学&#xff0c;而诺贝尔设置这个…

超详细的Linux环境下使用git上传代码教程(gitee版)

git是一个版本控制器&#xff0c;我们使用它上传我们以前写过的代码给他进行托管&#xff0c;更为方便以后找到&#xff0c;同时也方便我们找到我们每次更改了什么。 创建仓库 创建完成后界面&#xff1a; 接下来复制我们创建的仓库的地址&#xff1a; 使用 git 命令行 安装…

BGP路由策略,IPV6

下一跳不变 从EBGP来的路由,传给|BGP S居时,下一跳不变 解决方案: 水平分割 ∷:AS内防环 从|BGP来的路由,不会传给IBGP邻居 1全互联 2路由反射器 3联盟 BGP选路原则: 当BGP 由表存在多条相同路由,会产生多个转发路径,BGP 会根据这些路由的属性,选择一条最优…

使用 C 语言验证非均匀概率的离散事件在样本数量足够大时,符合正态分布曲线(通过生成一个PPM格式的图像)

我想写本文的原因是看到著名数学科普账号 3Blue1Brown 发布的【官方双语】但是什么是中心极限定理&#xff1f;中提到&#xff1a;不论这个离散型事件的各种情况概率是不是平均的&#xff0c;当数量一定大时&#xff0c;还是会符合正态分布曲线。我就想自己试试看是不是这种情况…