未初始化的变量

news/2024/9/18 14:43:56/ 标签: 开发语言, 编程语言, c, c++, java, 程序员, 编程
cle class="baidu_pl">
cle_content" class="article_content clearfix">
content_views" class="htmledit_views">

学习C语言局部变量࿰c;经常听到这个说法。为什么局部变量默认是未初始化的?解释它需要理解程序结构和栈操作。

栈内存

  • C/C++函数的局部变量保存在栈࿰c;栈可以认为是操作系统为了“加速”程序运行给线程配置了一块临时使用的内存区域࿰c;如果有临时使用的变量࿰c;直接压栈或者出栈即可。
  • CPU用push和pop执行压栈和出栈࿰c;仅仅是修改的RSP或ESP的指针࿰c;没有任何一条指令在清零栈内存。
  • C/C++局部变量int a或者int a[10]并不会生成初始化它们的代码࿰c;编译器只不过偷偷计算占用的空间࿰c;并修改RSP/ESP初始值࿰c;并通过它们的相对关系找到对应的临时变量࿰c;仅此而已。
  • 注意࿰c;需要和申请内存清零区分开。这是申请的时刻清零࿰c;运行时操作系统不会浪费时间去清零不用的堆栈。
  • 顺带介绍一下向内核申请内存的清零行为。操作系统在创建进程或线程时࿰c;Windows早期内核并不为栈(包括堆内存)初始化࿰c;Windows 10 版本 2004 之后建议用类似ExAllocatePoolZero的API申请(默认会清零内存)࿰c;请参见:Windows内核申请内存清零? 值得注意的是࿰c;一般而言࿰c;通过操作系统native API向内核申请的内存࿰c;一般会被清零࿰c;这是为了安全(注意内核为了优化性能࿰c;可能用一个fake zero page代替(读内存只会返回0࿰c;未真正将page清零)࿰c;等到真正写内存时重新申请创建PTE并做真正清零动作)。但内核态属于信任模式࿰c;内核使用新page可能使用非零内存。
  • C#不允许使用未初始化的局部变量࿰c;否则编译错误。C#的类或结构的字段࿰c;不显式初始化࿰c;默认值为0.
  • Java类似C#࿰c;不过它没有结构体。


微风不燥࿰c;阳光正好࿰c;你就像风一样经过这里࿰c;愿你停留的片刻温暖舒心。

c0389bf1">我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享)࿰c;若作品对您有帮助࿰c;请关注、分享、点赞、收藏、在看、喜欢࿰c;您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

class="blog-extension-box">

http://www.ppmy.cn/news/1516997.html

相关文章

Spring Boot 框架中配置文件 application.properties 当中的所有配置大全

Spring Boot 框架中配置文件 application.properties 当中的所有配置大全 #SPRING CONFIG(ConfigFileApplicationListener) spring.config.name #配置文件名(默认 为 application ) spring.config.lo…

一个干净的python项目(没连数据库啥的)

希望你们写代码有用(直接可以拿来用,我只要您的一个关注和赞赞) #用户数据 user1{"用户名":"aaa","密码":"123","姓名":"热孜娅","类型":"客户"} user2{&q…

Python 爬虫框架

Python 中有许多强大且主流的爬虫框架,这些框架提供了更高级的功能,使得开发和维护爬虫变得更加容易。以下是一些常用的爬虫框架: 1. Scrapy - 简介: Scrapy 是 Python 最流行的爬虫框架之一,设计用于快速、高效地从网站中提取…

【Rust光年纪】文本分析利器:探索Rust语言的多功能文本处理库

从情感分析到关键词提取:Rust语言文本分析库详解 前言 随着自然语言处理技术的不断发展,对各种文本数据进行分析和处理的需求也在不断增加。本文将介绍一些用于Rust语言的文本分析和处理库,包括情感分析、自然语言处理、中文转换、语言检查…

SQL,给连续的行加上标识序号

postgresql 数据库的表 tmp 有 2 个分组字段,source_id 和 event_user,将该表按 source_id 分组,组内按 event_date 排序后,event_user 相同的值会形成有序的小组: idsource_idevent_userevent_date11A05-03-201421A0…

DSB调制与解调仿真实验

一、实验目的: 熟悉使用SystemView软件,了解各部分功能模块的操作和使用方法。 通过实验进一步观察、了解模拟信号DSB调制、解调原理。 掌握DSB调制信号的主要性能指标。 比较、理解DSB调制的相干解调原理。 二、实验器材: 装有SystemV…

spring security怎么生成JWT返回前端,以及怎么自定义JWT认证过滤器

怎么生成JWT返回前端 1.先写一个类,里面含有jwt的生成解析验证过期时间的方法 package com.lzy.util;import io.jsonwebtoken.*; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.…

黑神话悟空用什么编程语言

《黑神话:悟空》作为一款备受瞩目的国产单机动作游戏,其背后的开发涉及了多种编程语言和技术。根据公开信息和游戏开发行业的普遍做法,可以推测该游戏主要使用了以下几种编程语言: C: 核心编程语言:作为《黑…

从行为面试问题(behavioral questions)看中美程序员差异。

中美程序员在职场中的工作状态和职能、福利等有很大区别,从面试中的BQ轮就可见一斑。 中美程序员的面试轮差异? 国内的面试轮在不同公司间差异很大,但总体的问题类型包含笔试面试(算法题、概念题、项目深挖、职业目标、职场文化…

【刷题笔记】leetCode448找到缺失的数

常规解法 public List<Integer> findDisappearedNumbers(int[] nums) {HashMap<Integer,Integer> numMap new HashMap<>();for (int i 0;i<nums.length;i){if (numMap.get(nums[i]) null){numMap.put(nums[i],i);}}List<Integer> result new A…

物联网关创业之路:从梦想到现实

在物联网大潮涌动的时代&#xff0c;李明看到了无限的机遇。他一直对科技充满热情&#xff0c;坚信物联网将改变人们的生活和工作方式。各类设备 IoT 的兴起&#xff0c;让他意识到一个强大的物联网关对于实现设备互联和数据传输的重要性。 李明决定投身于物联网关的设计开发创…

Apache Druid日志实时分析

业务分析 ​ 秒杀业务中&#xff0c;通常会有很多用户同时蜂拥而上去抢购热卖商品&#xff0c;经常会出现抢购人数远大于商品库存。其实在秒杀过程中&#xff0c;热卖商品并不多&#xff0c;几乎只占1%&#xff0c;而99%的流量都源自热卖商品&#xff0c;很有可能因为这1%的热…

Stream DATA From openai GPT-3 API using php

题意&#xff1a;“使用 PHP 从 OpenAI GPT-3 API 流式传输数据” 问题背景&#xff1a; Im having trouble with the OpenAI API, Basically what Im trying to do is stream each data node that is streamed back from the openai API response and output each data node …

综合评价 | 基于层次-熵权-变异系数-正态云组合法的综合评价模型(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 综合评价 | 基于层次-熵权-变异系数-正态云组合法的综合评价模型&#xff08;Matlab&#xff09; AHP层次分析法是一种解决多目标复杂问题的定性和定量相结合进行计算决策权重的研究方法。该方法将定量分析与定性分析…

Qt:玩转QPainter序列一

前言 最近想潜心研究一下QPainter这个类&#xff0c;最好把QPainter所有的函数都敲一遍&#xff0c;特地记录一下。 在说QPainter之前我们需要了解两个非常重要的东西 第一个坐标系 我用两张图来表示 代码实操的结果 更加详细的坐标系内容请看我的另一篇博客 第二个是有…

VCTP(Visual Chain-of-Thought Prompting for Knowledge-Based Visual Reasoning)论文

目录 摘要介绍相关工作方法总体模型细节 实验 摘要 知识型视觉推理仍然是一个艰巨的任务&#xff0c;因为它不仅要求机器从视觉场景中解释概念和关系&#xff0c;而且还需要将它们与外部世界知识联系起来&#xff0c;对开放世界问题进行推理链。然而&#xff0c;以前的工作将视…

【区块链 + 智慧文旅】鲜檬内容生态平台 | FISCO BCOS应用案例

基于鲜檬&#xff08;虎彩集团旗下的“鲜檬摄影有限公司”&#xff0c;简称鲜檬&#xff09;的业务规划&#xff0c;除了婚拍摄影外&#xff0c;以定制化家纺、 餐具、陶瓷品为主的产品诉求也日渐增加。为了支撑庞大的业务体量&#xff0c;设计能力的连接和整合迫在眉睫。同时&…

[C++番外] 抛异常

一、C语言的时候我们怎么判断错误的呢&#xff1f; C语言的错误处理机制&#xff1a; 终止程序&#xff0c;如assert&#xff0c;缺陷&#xff1a;用户难以接受。如发生内存错误&#xff0c;除0错误时就会终止程序。返回错误码&#xff0c;缺陷&#xff1a;需要程序员自己去查…

如何下载jmeter旧版本

如何下载jmeter旧版本 推荐先用旧版本做好测试基本操作&#xff0c;因为高版本不适合做压力测试&#xff0c;需要证书&#xff0c;有点麻烦。 1.百度或直接打开jmeter官网&#xff1a;https://jmeter.apache.org/ 2.向下拖到Archives一栏&#xff0c;点击Apache Jmeter archi…

SpringCache源码解析(一)-Annotation

〇、常用注解 包地址注解名作用域作用org.springframework.cache.annotationCacheConfig类级别s设置缓存的公共配置Cacheable方法级别缓存读取操作CacheEvict方法级别缓存失效操作CachePut方法级别缓存更新操作Caching方法级别h混合读取、失效、更新操作CacheConfig方法级别统…