当前位置: 首页 > news >正文

JVM:程序计数器、虚拟机栈、本地方法栈

一、程序计数器

(1)程序计数器介绍

  1. 作用:当线程执行 Java 方法时,程序计数器记录该线程下一条要执行的字节码指令的地址;当线程执行本地方法时,程序计数器的值为未指定(undefined)
  2. 特点:由于只需记录指令地址,程序计数器占用空间小,不会出现内存溢出问题。它是线程私有的,独立于线程栈,生命周期与线程一致
  3. 功能:当发生线程切换,或者程序遇到分支、循环、跳转、异常处理等情况时,依靠程序计数器来确定接下来从哪里继续执行

(2)举例说明

当一个线程运行到某个方法时,会从方法区的类信息里找到该方法对应的字节码文件,字节码文件由一系列指令构成。方法开始运行,若不是热点代码,每行指令会由字节码解释器逐行解释执行。在执行过程中,程序计数器会记录当前线程下一条要执行的字节码指令在字节码文件中的偏移地址

(3)两个常见问题

  1. 存储指令地址的作用发生线程切换、程序有分支等情况时,程序计数器能确定后续要运行的指令,保证程序连贯执行
  2. 线程私有的原因多线程环境下,CPU 核在不同线程间切换,同一时刻一核执行一线程,若多线程共用会产生覆盖问题

二、虚拟机栈

  1. 每个线程都有一个专属的虚拟机栈,它是线程私有的,其生命周期和线程一致,与程序计数器相同。它以栈帧为基本单位,主要操作是栈帧的入栈和出栈,不存在垃圾回收问题。若线程栈数量过多,会导致内存溢出(OutOfMemoryError);若一个线程栈内方法调用层数过多,会导致栈溢出(StackOverflowError)
  2. 栈帧是虚拟机栈的基本单位,遵循先进后出的原则,同一时刻只有栈顶的栈帧对应的方法在运行。方法开始执行时,对应的栈帧入栈;方法执行完毕,栈帧出栈。栈帧包含局部变量表、操作数栈、动态链接、方法返回地址以及一些附加信息
  3. 局部变量表用于存储方法的形参以及方法内部定义的局部变量。在方法调用时,实参的值会传递给形参变量。局部变量表的大小在编译阶段就已确定,32 位的数据类型(如 int、float 等)占用一个 slot,64 位的数据类型(如 long、double )占用两个连续的 slot。对于基本数据类型,slot 中存储的是具体的值;对于引用数据类型,slot 中存储的是对象的引用地址
  4. 操作数栈用于存放计算过程中的中间结果,它会根据字节码指令从局部变量表或者其他地方提取数据进行运算。操作数栈的深度在编译时也已经确定
  5. 动态链接的作用是将运行时常量池中的符号引用转换为直接引用。在类加载过程中,方法的调用以符号引用的形式存在于常量池中。在运行时,动态链接会根据这些符号引用找到对应的方法的实际内存地址。对于虚方法调用,还需要在运行时根据对象的实际类型来确定具体调用的方法版本,而不是简单地根据对象地址找类型再确定方法
  6. 方法返回地址记录的是调用该方法的位置,也就是调用该方法的指令的下一条指令的地址。当当前方法执行结束,对应的栈帧出栈,程序会根据这个返回地址继续执行上层方法中后续的指令
  7. 非虚方法在编译阶段就可以确定要调用的具体方法,像静态方法、私有方法、final 方法都属于非虚方法,因为它们的调用目标在编译时就已明确,不会因为对象的实际类型不同而改变。而虚方法由于多态机制的存在,在编译时无法确定具体调用的是哪个类的方法版本

三、本地方法栈

  1. 本地方法栈和虚拟机栈类似,主要区别在于虚拟机栈为执行 Java 方法服务,而本地方法栈为执行本地方法(通常用 C、C++ 编写)服务,栈中的栈帧由调用本地方法形成
  2. 随着 JVM 发展,部分 JVM 实现将本地方法栈和虚拟机栈进行了合并,即它们共用一个栈。这个栈里可能包含 Java 方法的栈帧,也可能包含本地方法(如 C、C++ 方法)的栈帧

四、其它相关知识

在 JVM 中一个多态方法的调用过程如下:

  1. 线程的某个方法里使用多态机制创建对象,即父类变量指向子类对象。若子类对象所属类的信息尚未加载进 JVM,会触发类的加载。类加载器会将该类的二进制字节码文件加载进 JVM,若其父类也未加载,则先加载父类,再加载子类
  2. 接着,根据字节码文件,将类的定义(包括类中属性、方法定义及方法字节码)、类的继承关系等信息存于方法区的类信息部分;把类中的数字、常量、类名、属性名、方法名(符号引用)等放入方法区的运行时常量池;将类的静态变量以及运行时才能确定值的常量(如被 static final 修饰的引用类型变量)存于方法区的静态变量部分
  3. 随后进行类的验证、准备(为静态变量分配内存并赋初始值)、解析和初始化(调用类的 <clinit> 方法)。这里的解析不仅包括创建虚方法表,还会将符号引用转换为直接引用。虚方法是指类中除静态方法、private 方法、final 方法之外的方法,虚方法表记录着虚方法名和虚方法字节码的实际内存地址
  4. 之后在堆内存中创建子类对象,先对其属性中属于父类的部分赋值,对象头中有一个指针指向方法区中的类元数据信息
  5. 当对象调用方法(若是虚方法),会通过对象头指针找到其真正所属的类,然后在该类的虚方法表中查找此方法。若找到,依据虚方法表中的地址定位字节码文件;若未找到,会根据类的继承关系查找其父类的虚方法表,这就是动态链接的过程。程序计数器会记录下一条要执行的字节码指令相对于字节码文件的偏移量

在执行方法时,数据值的查找有三种情况: 

  1. 若使用形参或方法内定义的变量,会在栈帧的局部变量表中查找。局部变量表的大小在编译成字节码文件时就已确定,方法入栈时,栈帧会为其分配空间
  2. 若使用对象的实例变量,会根据对象在堆内存中的地址定位该对象,因为实例变量存储在堆内存的对象里,可直接获取使用
  3. 若使用类变量,会到对象所属实际类在方法区的静态变量部分获取值

相关文章:

JVM:程序计数器、虚拟机栈、本地方法栈

一、程序计数器 &#xff08;1&#xff09;程序计数器介绍 作用&#xff1a;当线程执行 Java 方法时&#xff0c;程序计数器记录该线程下一条要执行的字节码指令的地址&#xff1b;当线程执行本地方法时&#xff0c;程序计数器的值为未指定&#xff08;undefined&#xff09;…...

适配器模式在Java开发中的应用

适配器模式&#xff08;Adapter Pattern&#xff09;是设计模式中的一种结构型模式&#xff0c;它允许将一个类的接口转换成客户端所期望的另一个接口。通过这种方式&#xff0c;原本因接口不兼容而无法协同工作的类能够一起工作。适配器模式在Java开发中非常常见&#xff0c;尤…...

(三)谷歌Code as Policies复现(操作记录)

目录 《复现的项目来源》 一、创建虚拟环境 二、下载原项目并修改&#xff08;非必须&#xff09; 二、可直接下载修改后的项目 三、配置环境 &#xff08;1&#xff09;安装jupyterlab以及内核 &#xff08;2&#xff09;安装ffmpeg &#xff08;3&#xff09;配置环境…...

驱动学习专栏--字符设备驱动篇--2_字符设备注册与注销

对于字符设备驱动而言&#xff0c;当驱动模块加载成功以后需要注册字符设备&#xff0c;同样&#xff0c;卸载驱动模 块的时候也需要注销掉字符设备。字符设备的注册和注销函数原型如下所示 : static inline int register_chrdev(unsigned int major, const char *name, const…...

奥创中心卸载工具Armoury Crate Uninstall Tool官网下载

为了应对用户对 Armoury Crate 占用资源大、卸载困难等问题的普遍反馈&#xff0c;ASUS 官方提供了一个专门的卸载工具&#xff0c;即 Armoury Crate Uninstall Tool(奥创中心卸载工具)。该工具的主要作用是帮助用户彻底从系统中移除 Armoury Crate 相关的所有组件&#xff0c;…...

【Linux网络】网络基础概念深度解析

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

【NLP 61、大模型应用 —— RAG方法】

生活打不败一个大口吃饭的人&#xff01; —— 25.4.13 一、模型幻觉问题 模型幻觉&#xff08;AI Hallucination&#xff09;是指人工智能模型&#xff08;尤其是大语言模型&#xff09;生成看似合理但实际不准确、虚构或与事实不符内容的现象。其本质是模型基于统计概…...

UV工具——小试牛刀

背景 MCP开发使用到 为什么MCP更推荐使用uv进行环境管理&#xff1f; MCP 依赖的 Python 环境可能包含多个模块&#xff0c;uv 通过 pyproject.toml 提供更高效的管理方式&#xff0c;并且可以避免 pip 的一些依赖冲突问题。此外&#xff0c;uv 的包管理速度远超 pip…...

vue3+vite 多个环境配置

同一套代码 再也不用在不同的环境里来回切换请求地址了 然后踩了一个坑 就是env的文件路径是在当前项目下 不是在views内 因为公司项目需求只有dev和pro两个环境 虽然我新增了3个 但是只在这两个里面配置了 .env是可以配置一些公共配置的 目前需求来说不需要 所以我也懒得配了。…...

《分布式软总线架构下,设备虚拟化技术的深度剖析与优化策略》

设备之间的互联互通和协同工作已成为一种趋势。分布式软总线架构作为实现这一目标的关键技术&#xff0c;为不同设备之间的通信和协作提供了基础。而设备虚拟化技术则是在分布式软总线架构下&#xff0c;进一步提升设备资源利用效率的重要手段。本文将深入探讨在分布式软总线架…...

MCP 正当时:FunctionAI MCP 开发平台来了!

作者&#xff1a;封崇 MCP&#xff1a;AI 时代的“操作系统接口” 2024 年 11 月&#xff0c;Anthropic 发布模型上下文协议&#xff08;MCP&#xff09;&#xff0c;这一开放标准迅速引发开发者社区的"协议觉醒"。其本质是通过标准化接口实现 LLM 与外部世界的双向…...

AI Agents系列之AI代理的类型

在本文中,我们将探讨不同类型的 AI 代理,包括它们的实现、实际应用、优势和局限性。从简单反射代理到多代理系统,我们将了解这些模型如何推动自动化、决策制定和智能问题解决。 文章目录 1. AI代理的类型1.1 简单反射代理1.1.1 实现**1.1.2 优势****1.1.3 局限性**1.2 基于…...

Go RabbitMQ基础教程:入门与实践指南,实战代码讲解

简介&#xff1a; RabbitMQ是一款实现高级消息队列协议&#xff08;AMQP&#xff09;的消息代理软件&#xff0c;也称为消息队列或消息中间件。它通过解耦应用程序之间的直接通信&#xff0c;支持异步数据交换&#xff0c;增强了系统的可扩展性和灵活性。RabbitMQ能够跨平台运…...

LeetCode详解之如何一步步优化到最佳解法:27. 移除元素

LeetCode详解系列的总目录&#xff08;持续更新中&#xff09;&#xff1a; LeetCode详解之如何一步步优化到最佳解法&#xff1a;前100题目录&#xff08;更新中...&#xff09;-CSDN博客 LeetCode详解系列的上一题链接&#xff1a; LeetCode详解之如何一步步优化到最佳解法…...

c++原子操作

原子操作&#xff0c;顾名思义&#xff0c;该操作不可分割。多线程环境也能保证读写数据不错乱。百度搜索了下&#xff0c;其核心概念如下&#xff1a; 1、不可分割性。原子操作是指一系列不可被CPU上下文交换的机器指令&#xff0c;操作要么完全执行&#xff0c;要么完全不执…...

在 Redis Lua 脚本中,keyCount 参数的作用是明确区分脚本参数中的 KEYS 和 ARGV,具体关系如下:

在 Redis Lua 脚本中&#xff0c;keyCount 参数的作用是**明确区分脚本参数中的 KEYS 和 ARGV**&#xff0c;具体关系如下&#xff1a; --- ### 核心作用 1. **参数分类标识** - keyCount 表示脚本中使用的 Redis KEY 的数量&#xff08;即 KEYS 数组的长度&#xff09;…...

小白如何从0学习CSS

以下是针对小白从零开始系统学习 CSS 的完整路径和实用指南&#xff0c;结合核心概念、实践技巧和项目经验&#xff0c;助你掌握网页样式的精髓&#xff1a; 1. 理解 CSS 是什么&#xff1f; 定义&#xff1a;CSS&#xff08;层叠样式表&#xff09;用于控制网页的视觉表现&…...

一文掌握RK3568开发板Android13挂载Windows共享目录

在物联网和边缘计算场景中&#xff0c;开发板与PC端的高效文件交互尤为重要。现以iTOP-RK3568开发板为例&#xff0c;详细演示Android13系统如何通过CIFS协议挂载Windows共享目录&#xff0c;实现开发板与PC的无缝文件共享。 RK3568开发板优势 iTOP-3568开发板采用瑞芯微RK3…...

UE5烘培后->为什么C磁盘满了

烘培会产生ddc 需要把路径切换一下&#xff0c;比如切换到游戏空间下。 如何修改&#xff0c;修改如下&#xff1a; 使用记事本打开BaseEngine.ini文件。 将以下内容&#xff1a; textCopy Code Path\"%ENGINEVERSIONAGNOSTICUSERDIR%DerivedDataCache\" 替换为&…...

本地搭建全网可访问的开源音乐服务器Melody结合内网穿透随时听歌

文章目录 前言1. 添加镜像源2. 本地部署Melody3. 本地访问与使用演示4. 安装内网穿透5. 配置Melody公网地址6. 配置固定公网地址 前言 嗨&#xff0c;各位音乐发烧友们&#xff01;今天我要带你们解锁一个超酷的新技能——在香橙派Zero3上搭建自己的在线音乐平台&#xff0c;并…...

深度学习Y5周:yolo.py文件解读

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、前言 文件位置&#xff1a;./models/yolo.py 此文件是实现YOLOv5网络模型的搭建文件&#xff0c;如果想改进YOLOv5&#xff0c;这个文件是必须进行修改的…...

Qt实现文件传输服务器端(图文详解+代码详细注释)

Qt实现文件传输服务器 1、前言2、服务器2.1 服务器UI界面2.2添加网络模块和头文件2.3、创建服务器对象2.4 连接有新连接的信号与槽2.5实现有新连接处理的槽函数2.6 选择文件按钮实现2.6.1 连接按钮点击的信号与槽2.6.2 添加头文件2.6.3 创建所需对象2.6.3 选择文件按钮实现 2.7…...

记录学习的第二十七天

今天效率低下&#xff0c;只做了一道力扣的每日一题。 看了题解才懂的。下面复述一遍吧。 算法就是越长越合法型滑动窗口。 核心&#xff1a; 如果此时窗口中有c个元素x&#xff0c;此时再进一个x&#xff0c;那么相同数对就增加c个。 如果此时窗口有c个元素x&#xff0c;此…...

docker 安装TDengine 时序数据库

TDengine是一个高性能、分布式a的时序数据库&#xff0c;专为物联网(loT)和大数据分析日设计。使用Docker快速地搭建 TDengine 的开发或测试环境。以下技术指南&#xff0c;帮助您通过Docker Compose 安装并运行TDengine 1.拉取镜像 (3.3.6.0版本) docker pull registry.cn-ha…...

如何更好使用呼叫中心系统和语音机器人

​要更好地使用呼叫中心系统和语音机器人&#xff0c;需要结合两者的优势&#xff0c;实现自动化、智能化、高效率的客户服务与业务运营。以下是优化策略和具体实践方法&#xff1a; 一、呼叫中心系统优化 1. 智能路由与IVR优化 ​ ​智能ACD&#xff08;自动呼叫分配&…...

C复习(主要复习)

指针和数组 指针数组是一个数组&#xff0c;数组的每个元素都是指针。它适用于需要存储多个指针的场景&#xff0c;如字符串数组。数组指针是一个指针&#xff0c;指向一个数组。它适用于需要传递整个数组给函数或处理多维数组的场景。 函数指针&#xff1a;函数指针的定义需要…...

网页五子棋项目测试报告

一、测试概述 网页五子棋项目运用 Java 语言与 Spring 框架开发&#xff0c;具备用户登录注册、人机对战、在线匹配对局、房间邀请对局及积分排行榜等功能。本次测试旨在评估项目各功能的完整性、稳定性与交互性&#xff0c;依据各文章所描述的功能设计和实现细节进行全面测试…...

大模型提示词prompt

系列文章目录 第一章 提示词的引言和指南 文章目录 系列文章目录前言原则1&#xff1a;写清楚具体的说明1、使用分割符2、要求结构化输出3、检查条件是否满足 检查完成任务所需的假设4、少量样例提示给出成功的例子 原则2&#xff1a;给模型足够的时间思考1、给予模型要输出执…...

如何让Agent开发正真可控、可靠?Cursor AI工程化

工程化的目的 不知道你在AI编程的过程中有没有这样的痛点&#xff1f;开发质量不理想、研发进度无法把控… 问题核心在于没有一套属于AI编程的规范&#xff0c;这正是工程化要解决的问题。 如何工程化 参考我们正常研发流程中的步骤&#xff0c;技术方案设计&评审->…...

计算机视觉——基于人工智能视觉注意力的在线广告中评估检测技术

概述 自2023年在线广告行业估计花费了7403亿美元以来&#xff0c;很容易理解为什么广告公司会投入大量资源进行这一特定领域的计算机视觉研究。 尽管这个行业通常较为封闭和保守&#xff0c;但偶尔也会在arxiv等公共存储库中发布一些研究&#xff0c;这些研究暗示了更先进的专…...

opencv函数展示

一、图像基础 I/O 与显示 1.cv2.imread() 2.cv2.imshow() 3. cv2.waitKey() 4. cv2.imwrite() 5. cv2.selectROI() 6. cv2.VideoCapture() 二、颜色空间与转换 1. cv2.cvtColor() 2. cv2.split() 三、阈值处理 1. cv2.threshold() 2. 特殊阈值方法...

Redis 的不同数据结构分别适用于哪些微服务场景

我们一块来分析下Redis 的不同数据结构在微服务场景下的具体应用&#xff1a; 1. String (字符串) 特点: 最基本的数据类型&#xff0c;二进制安全&#xff0c;可以存储任何类型的数据&#xff08;文本、序列化对象、图片等&#xff09;&#xff0c;最大 512MB。支持原子性的…...

用node编写git钩子hooks的示例

关于 git 钩子函数&#xff0c;就是在 git 进行提交的时候触发一些可执行脚本的功能&#xff0c;详情可以看这篇博客【GIT知识】git进阶-hooks勾子脚本_git hooks-CSDN博客&#xff0c;我这里稍微演示一下怎么用 node 编写钩子的脚本 以 pre-commit 钩子为例&#xff0c;会在用…...

RISC-V架构新生态:鸿道Intewell操作系统×全志D1芯片

在全球化技术博弈与自主可控需求的双重驱动下&#xff0c;RISC-V架构正从开源革命走向产业落地。然而&#xff0c;RISC-V生态的成熟不仅需要硬件层面的突破&#xff0c;更需操作系统与芯片的深度协同。鸿道Intewell操作系统与全志D1&#xff08;RISC-V架构&#xff09;芯片的适…...

盈达科技:重新定义GEO优化的技术边界与商业未来​

​ ​​——以硬核技术领跑生成式AI时代的认知主权争夺战​​ ​​01 技术架构&#xff1a;AICC 2.0智能协同中心​​ ​​生成式AI优化的「核动力引擎」​​ 盈达科技独创的​​AICC 2.0&#xff08;自适应-智能-认知-动态响应&#xff09;智能协同中心​​&#xff0c;构建…...

芯片测试工具系统Demo示例

芯片测试工具系统Demo示例 一个简单的芯片测试工具系统Demo示例&#xff0c;包含基础功能和模拟测试流程&#xff0c;使用Python实现&#xff1a; python import time import random import csv from datetime import datetime class VirtualChip: """模…...

从单模态到多模态:五大模型架构演进与技术介绍

前言 1. ResNet — 残差神经网络背景核心问题与解决方案原理模型架构ResNet 系列变体技术创新与影响 2. ViT — Vision Transformer背景核心思想发展历程Transformer的起源&#xff1a;ViT的出现&#xff1a;ViT的进一步发展&#xff1a; 模型架构技术创新与影响 3. Swin Trans…...

基于 Java 的淘宝 API 调用实践:商品详情页 JSON 数据结构解析与重构

一、引言 在电商领域&#xff0c;淘宝拥有海量的商品数据。通过调用淘宝 API 可以获取商品详情页的 JSON 数据&#xff0c;这对于商家进行市场分析、竞品调研等具有重要意义。本文将详细介绍如何使用 Java 调用淘宝 API&#xff0c;获取商品详情页的 JSON 数据&#xff0c;并对…...

Sentinel源码—3.ProcessorSlot的执行过程二

大纲 1.NodeSelectorSlot构建资源调用树 2.LogSlot和StatisticSlot采集资源的数据 3.Sentinel监听器模式的规则对象与规则管理 4.AuthoritySlot控制黑白名单权限 5.SystemSlot根据系统保护规则进行流控 3.Sentinel监听器模式的规则对象与规则管理 (1)Sentinel的规则对象 …...

【C++11】列表初始化、右值引用、完美转发、lambda表达式

&#x1f4da; 博主的专栏 &#x1f427; Linux | &#x1f5a5;️ C | &#x1f4ca; 数据结构 | &#x1f4a1;C 算法 | &#x1f310; C 语言 上篇文章&#xff1a;unordered_map、unordered_set底层编写 下篇文章&#xff1a;C11&#xff1a;新的类功能、模板的可…...

Spring中IOC的重点理解(笔记)

Spring: 出现在2002左右.解决企业级开发的难度.减轻对项目模块 类与类之间的管理帮助开发人员创建对象,管理对象之间的关系. 补充&#xff1a;什么是OCP原则&#xff1f;&#xff08;面试&#xff09; &#xff08;1&#xff09;是软件七大开发当中最基本的一个原则&#xff…...

数据库系统概论|第三章:关系数据库标准语言SQL—课程笔记4

前言 前面详细介绍了关于SELECT语句的相关使用方法&#xff0c;继续上文的介绍&#xff0c;本文将继续介绍数据查询的其他相关操作&#xff0c;主要包括排序&#xff08;ORDER BY&#xff09;子句、分组&#xff08;GROUP BY&#xff09;子句。与此同时&#xff0c;介绍完单表…...

【1】CICD持续集成-docker本地搭建gitlab代码仓库社区版

‌一、gitlab社区版概述 GitLab社区版&#xff08;Community Edition, CE&#xff09;是一个开源的版本控制系统&#xff0c;适用于个人开发者、中小团队及大型企业。‌ GitLab社区版采用MIT许可证&#xff0c;用户可以免费使用和修改源代码。其主要功能包括代码托管、版本控制…...

Verdi工具使用心得知识笔记(一)

Verdi工具使用知识点提炼 本文来源于移知&#xff0c;具体文档请咨询厚台 一、基础概念 波形依赖 Verdi本身无法生成波形&#xff0c;需配合VCS等仿真工具生成.fsdb文件。核心功能模块 • nTrace&#xff1a;代码调试与追踪 • nSchema&#xff1a;原理图分析 • nState&…...

【25软考网工笔记】第二章 数据通信基础(4)数据编码

目录 一、曼彻斯特编码 1. 以太网 2. 题型(考试过的选择题) 1&#xff09;题目解析 二、差分曼彻斯特编码 三、两种曼彻斯特编码特点 ​编辑 1. 双相码 2. 将时钟和数据包含在信号数据流中 3. 编码效率低 4. 数据速率是码元速率的一半 5. 应用案例 ​编辑 1&…...

【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——USB OTG测试

1&#xff09;实验平台&#xff1a;正点原子ATK-DLMP257B开发板 2&#xff09;浏览产品&#xff1a;https://www.alientek.com/Product_Details/135.html 3&#xff09;全套实验源码手册视频下载&#xff1a;正点原子资料下载中心 第四章 ATK-DLMP257B功能测试——USB OTG测试…...

现代c++获取linux系统磁盘大小

现代c获取linux系统磁盘大小 前言一、命令获取系统磁盘大小二、使用c获取系统磁盘大小三、总结 前言 本文介绍一种使用c获取linux系统磁盘大小的方法 一、命令获取系统磁盘大小 在linux系统中可以使用lsblk命令显示当前系统磁盘大小&#xff0c;如下图所示 lsblk二、使用c获…...

tcp和udp的数据传输过程以及区别

tcp和udp的数据传输过程以及区别 目录 一、数据传输过程 1.1 UDP 数据报服务图 1.2 TCP 字节流服务图 1.3 tcp和udp的区别 1.3.1 连接特性 1.3.2 可靠性 1.3.3 数据传输形式 1.3.4 传输效率与开销 应用场景 一、数据传输过程 1.1 UDP 数据报服务图 这张图展示了 UDP 数据报服务…...

C++项目-衡码云判项目演示

衡码云判项目是什么呢&#xff1f;简单来说就是这是一个类似于牛客、力扣等在线OJ系统&#xff0c;用户在网页编写代码&#xff0c;点击提交后传递给后端云服务器&#xff0c;云服务器将用户的代码和测试用例进行合并编译&#xff0c;返回结果到网页。 项目最大的两个亮点&…...

C 语言中的 volatile 关键字

1、概念 volatile 是 C/C 语言中的一个类型修饰符&#xff0c;用于告知编译器&#xff1a;该变量的值可能会在程序控制流之外被意外修改&#xff08;如硬件寄存器、多线程共享变量或信号处理函数等&#xff09;&#xff0c;因此编译器不应对其进行激进的优化&#xff08;如缓存…...