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

自定义类型:结构体

1.结构体类型的声明

1.1.1结构的声明

struct tag
{member-list;
}variable-list;

描述一个学生:只包含了学生的名字、年龄、性别、学号

struct Stu 
{char name[20];//名字int age;//年龄char sex[5];//性别char id[20];//学号
};

 1.1.2 结构体变量的创建和初始化

struct Stu 
{char name[20];//名字int age;//年龄char sex[5];//性别char id[20];//学号
};
//初始化
int main()
{struct Stu s1 = { "zhangsan",20,"男","2023010101"};struct Stu s2 = { .age = 19, .name="lisi",.id="2025202020",.sex="nv"};printf("%s %d %s %s\n", s1.name, s1.age, s1.sex, s1.id);printf("%d %s %s %s\n", s2.age, s2.id, s2.name, s2.sex);return 0;
}

1.2结构的特殊声明

在声明结构的时候,可以不完全的声明

例子:

struct
{int a;char b;float c;}x;

上面的结构体在声明的时候省略掉了结构体标签(tag)

那么下面书写的代码对吗?

struct
{int a;char b;float c;}x;struct
{int a;char b;float c;
}* p;//匿名结构体指针???int main()
{p = &x;//???return 0;
}

上面的写法是错误的,即使两个匿名结构体的内容是一样的,但是,内存会默认上面的两个结构体的类型是不一样的,所以不能将x的地址直接赋值给指针p

警告:

编译器会把上面的两个声明当成完全不同的两个类型,所以是非法的。

匿名的结构体类型,如果没有对结构体类型重命名的话,基板上只能使用一次。

1.3结构的自引用

在结构体中包含一个类型为该结构本身的成员是可以的吗?

例子:定义一个链表的节点:

struct Node
{int data;//存放数据struct Node next;//存放下一个结点的地址 
};

上面书写的代码是正确的吗?

若正确,那么 sizeof(struct Node) 是多大的?

仔细分析的话,就会发现 struct Node 结构体中里面含有很多个  struct Node next,而  struct Node next 中还含有  struct Node next ,那么究竟有多少个呢?以此来说明,这样是不行的,因为一个结构体中再包含一个同类型的结构体变量,这样结构体变量的大小就会无穷的大,是不合理的。

正确的结构体自引用方式:

struct Node
{int data;//存放数据struct Node* next;//存放下一个结点的地址 
};

在结构体自引用使用的过程中,夹杂了 typedef 对匿名结构体类型的重命名,也容易出现问题,如下代码,正确吗?

typedef struct 
{int data;//存放数据Node* next;
}Node;

 是不正确的,因为Node是对前面的匿名结构体类型的重命名产生的,但是在匿名结构体内部提前使用Node类型来创建成员变量,这是不行的。

正确的代码如下:定义结构体的时候不要使用匿名结构体

typedef struct Node
{int data;//存放数据struct Node* next;
}Node;

2.结构体内存对齐

下面的代码中的变量仅仅是创建的顺序不同,为何运行出来的结果会不同??这是声明原因呢?

struct S1
{char c1;char c2;int i;
};struct S2
{char c1;int i;char c2;
};int main()
{printf("%d\n", sizeof(struct S1));printf("%d\n", sizeof(struct S2));return 0;
}

上面出现上面结果的不同是因为结构体内存的对齐的问题

2.1 对齐规则

1.结构体的第一个成员对齐到和结构体变量起始位置偏移量为0的地址处

2.其他成员变量对齐到某个数字(对齐数)的整数倍的地址处

对齐数=编译器默认的一个对齐数 与 该成员变量大小的较小值(vs 中默认的值是 8)

linux 中 gcc 没有默认对齐数,对齐数就是成员自身的大小

3.结构体总大小为最大对齐数(结构体中每一个成员变量都有一个对齐数,所有对齐数最大的)的整数倍。

4.如果嵌套了结构体的情况,嵌套的结构体成员对齐到自己的成员中最大对齐数的整数倍,结构体的整体大小就是所有最大对齐数(含嵌套结构体中成员的对齐数)的整数倍。

struct S1
{char c1;char c2;int i;
};
printf("%d\n", sizeof(struct S1));struct S2
{char c1;int i;char c2;
};
printf("%d\n", sizeof(struct S2));struct S3
{double d;char c;int i;
};
printf("%d\n", sizeof(struct S3));//练习4-结构体嵌套问题
struct S4
{char c1;struct S3 s3;//16double d;//8
};
printf("%d\n", sizeof(struct S4));

2.2为什么存在内存对齐?

1.平台原因(移植原因)

不是所有的硬件平台都能访问到任意地址上的任意数据的,某些硬件平台只能在某些地址处取某些特定的数据,否则会抛出硬件异常。

2.性能原因

数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要做两次的访问;而对齐的内存访问只需要一次访问。假设一个处理器总是从内存中取8个字节,则地址必须是8的倍数。如果我们能够保证将所有的double类型的数据的地址都对齐成8的倍数,那么就可以用一个内存操作来读或者写值了。否则,我们可能需要执行两次内存访问,因为对象被分放在了两个8字节内存块中。

总的来说:结构体的内存对齐是拿空间来换时间的做法。

在设计结构体的时候,我们既要满足对齐,又要满足空间,该如何操作?

让占用空间少的尽量集中写在一块:

struct S1
{char c1;char c2;int i;
};struct S2
{char c1;int i;char c2;
};

s1 和 s2 类型的成员一摸一样,但是 s1 和 s2 所占空间的大小是不一样的。

 

 

如果想判断我们分析的是否正确?

#include<stio.h>
#include<stddef.h>
struct S1
{char c1;char c2;int i;
};struct S2
{char c1;int i;char c2;
};
int main()
{//printf("%zd\n", sizeof(struct S1)); //8//printf("%zd\n", sizeof(struct S2)); //12printf("%zd\n", offsetof(struct S1,c1));//计算的是S1中 c1 的偏移量 以此来验证我们分析的图是否正确printf("%zd\n", offsetof(struct S1, c2));//计算的是S1中 c2 的偏移量printf("%zd\n", offsetof(struct S1, i));//计算的是S1中 i 的偏移量printf("%zd\n", offsetof(struct S2, c1));printf("%zd\n", offsetof(struct S2, c2));printf("%zd\n", offsetof(struct S2, i));return 0;
}

正确的就可以用 offsetof 来查看一下,任意一个字符的偏移量:

2.3 修改默认的对齐数

#pragma 这个预处理指令,可以改变编译器的默认对齐数。

#pragma pack(1) //设置vs默认的对齐数为 1
struct S1
{char c1;char c2;int i;
};
#pragma pack() //取消设置的对齐数,还原为默认的对齐数int main()
{printf("%d\n", sizeof(struct S1));//1return 0;
}

当我们再次运行这个代码的时候,结果就不是8了,而是6

 结构体在对齐方式不合适的时候,我们可以自己修改默认的对齐数。

3.结构体传参  

struct S
{int data[1000];int num;
};//结构体传参
void print1(struct S t) //结构体名不是结构体的地址
{printf("%d %d\n", t.data[0], t.num);
}
//结构体地址传参
void print2(const struct S* ps)
{printf("%d %d\n", ps->data[0], ps->num);
}
//两种方法都可以实现,但是最好是第二种的写法
int main()
{struct S s = { {1,2,3,4,5},122 };//初始化print1(s);print2(&s);return 0;
}

原因:

函数传参的时候,参数需要压栈,会有时间和空间上的系统开销

如果传递的是一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以会导致性能的下降。

结论:

结构体传参的时候,要传结构体的地址。

4.结构体实现位段

4.1 什么是位段?

位段的声明和结构体是类似的,有两个不同:

1.位段的成员必须是 int 、unsigned int 或 signed int,在C99中位段成员的类型也可以是选择其他类型

2.位段的成员名后边有一个冒号和一个数字

例子:

struct A
{//_ a是变量名//变量名://1.字母、数字、下划线//2.不能是数字开头int _a : 2;// 2 比特位int _b : 5;int _c : 10;int _d : 30;
};
int main()
{printf("%d\n", sizeof(struct A));//理论上:2+5+10+30= 47bit/8 约等于 6 byte 
}

A就是一个位段类型

那位段A所占内存的大小是多少?

4.2 位段的内存分配

1.位段的成员可以是 int 、unsigned int signed int 或者是 char 等类型

2.位段的空间是按照需要以4个字节(int)或者1个字节(char)的方式来开辟

3.位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位段。

struct S
{char a : 3;char b : 4;char c : 5;char d : 4;
};int main()
{struct S s = { 0 };s.a = 10;s.b = 8;s.c = 3;s.d = 4;printf("%d\n", sizeof(s));// 3字节return 0;
}

按照我们约定的方法的分析的话,刚好就是我们在vs2022下运行出来的:字节3,说明有可能vs2022就是这样规定的

4.3 位段跨平台问题

位段这么好,那我们应该多多使用位段这种方法???显然是不行的:

1.int 位段被当成有符号数还是无符号数这是不确定的

2.位段中最大位的数目是不能能确定的。(16位机器上最大是16,32位机器上最大是32,当我们写成27的时候,在16位机器上是会出现问题的)

3.位段中的成员在内存中是从从左向右分配,还是从右向左分配,标准是未定义的

4.当一个结构体包含两个位段,第二个位段成员比较大时,无法容纳于第一个位段剩余的位时,是舍弃还是利用剩余的位,这也是不确定

总结:

跟结构相比,位段可以达到相同的效果,并且可以很好的节省空间,但是有跨平台的问题存在

4.4 位段的应用

在网络协议中,IP数据包的格式的实现就需要用位段的实现是最好的,也节省了空间,这样网络传输的数据报大小也会较小一点,对网络的畅通是有帮助的

4.5 位段使用的注意事项

位段的几个成员共有同⼀个字节,这样有些成员的起始位置并不是某个字节的起始位置,那么这些位置处是没有地址的。内存中每个字节分配⼀个地址,⼀个字节内部的bit位是没有地址的。
所以不能对位段的成员使⽤&操作符,这样就不能使用scanf直接给位段的成员输⼊值,只能是先输入放在⼀个变量中,然后赋值给位段的成员。 

相关文章:

自定义类型:结构体

1.结构体类型的声明 1.1.1结构的声明 struct tag {member-list; }variable-list; 描述一个学生&#xff1a;只包含了学生的名字、年龄、性别、学号 struct Stu {char name[20];//名字int age;//年龄char sex[5];//性别char id[20];//学号 }; 1.1.2 结构体变量的创建和初始…...

以项目的方式学QT开发C++(一)——超详细讲解(120000多字详细讲解,涵盖qt大量知识)逐步更新!

以项目的方式学QT开发 以项目的方式学QT开发 P1 QT介绍 1.1 QT简介 1.2 QT安装 1.2.1 Windows QT安装 1.2.2 QT Creator 使用基本介绍 P2 C基础 2.1 命名空间 2.1.1 命名空间作用 2.1.2 自定义命名空间 2.2 从C语言快速入门 2.2.1 输入输出 2.2.2 基…...

Spring框架的事务管理

引言 在企业级应用开发中&#xff0c;事务管理是一个至关重要的环节&#xff0c;它确保了数据的一致性和完整性。Spring 框架为我们提供了强大而灵活的事务管理功能&#xff0c;能够帮助开发者更轻松地处理复杂的事务场景。本文将深入探讨 Spring 框架的事务管理&#xff0c;包…...

TypeScript:类

一、基本概念 TypeScript 类是基于 ES6 类的语法扩展&#xff0c;增加了类型注解和访问修饰符等特性&#xff0c;提供了更强大的面向对象编程能力。 二、基本语法 class Person {name: string;age: number;constructor(name: string, age: number) {this.name name;this.ag…...

Python继承

在Python编程中&#xff0c;继承是一个让新手又爱又怕的概念。今天我们就来聊聊这个看似高深实则简单的特性&#xff0c;保证让你看完后能拍着胸脯说&#xff1a;“继承嘛&#xff0c;小菜一碟&#xff01;” 一、什么是继承&#xff1f; 想象一下你正在玩一个养成游戏。你创…...

浏览器宝塔访问不了给的面板地址

注意你们的端口&#xff0c;服务器的端口开放了没&#xff01;&#xff01;&#xff01;宝塔给的端口是否在范围之内&#xff01;&#xff01; 我的当时是1000/10000 &#xff08;阿里云服务器&#xff09; 但是宝塔给的是 4W多 对不上&#xff01;&#xff01; 更换安全组…...

强化学习入门:马尔科夫奖励过程

文章目录 前言1、组成部分2、应用例子3、马尔科夫奖励过程总结 前言 最近想开一个关于强化学习专栏&#xff0c;因为DeepSeek-R1很火&#xff0c;但本人对于LLM连门都没入。因此&#xff0c;只是记录一些类似的读书笔记&#xff0c;内容不深&#xff0c;大多数只是一些概念的东…...

RHCE实验:通过脚本判断用户是否存在

一、实验要求 1、 写一个脚本&#xff0c;使用函数完成 1 、函数能够接受一个参数&#xff0c;参数为用户名&#xff1b; 判断一个用户是否存在 如果存在&#xff0c; 就返回此用户的 shell 和 UID &#xff1b;并返回正常状态值&#xff1b; 如果不存在&#xff0c;就说此用…...

Windows软件插件-音视频捕获

下载本插件 音视频捕获就是获取电脑外接的话筒&#xff0c;摄像头&#xff0c;或线路输入的音频和视频。 本插件捕获电脑外接的音频和视频。最多可以同时获取4个视频源和4个音频源。插件可以在win32和MFC程序中使用。 使用方法 首先&#xff0c;加载本“捕获”DLL&#xff0c…...

每日算法 - 【Swift 算法】Two Sum 问题:从暴力解法到最优解法的演进

【Swift 算法】Two Sum 问题&#xff1a;从暴力解法到最优解法的演进 本文通过“Two Sum”问题&#xff0c;带你了解如何从最直观的暴力解法&#xff0c;逐步优化到高效的哈希表解法&#xff0c;并对两者进行对比&#xff0c;适合算法入门和面试准备。 &#x1f4a1; 问题描述 …...

2025年,如何制作并部署一个完整的个人博客网站

欢迎访问我的个人博客网站&#xff1a;欢迎来到Turnin的个人博客 github开源地址&#xff1a;https://github.com/Re-restart/my_website 前言 2024年年初&#xff0c;从dji实习回来之后&#xff0c;我一直想着拓宽自己的知识边界。在那里我发现虽然大家不用java&#xff0c;…...

深度学习框架---TensorFlow概览

一、TensorFlow 概述 1. 发展历程 1.x 版本&#xff1a;基于静态图&#xff08;Graph&#xff09;和会话&#xff08;Session&#xff09;&#xff0c;需预先定义计算图&#xff0c;调试较复杂。2.x 版本&#xff1a;默认启用动态图&#xff08;Eager Execution&#xff09;&…...

鸿蒙OSUniApp制作自定义的下拉菜单组件(鸿蒙系统适配版)#三方框架 #Uniapp

UniApp制作自定义的下拉菜单组件&#xff08;鸿蒙系统适配版&#xff09; 前言 在移动应用开发中&#xff0c;下拉菜单是一个常见且实用的交互组件&#xff0c;它能在有限的屏幕空间内展示更多的选项。虽然各种UI框架都提供了下拉菜单组件&#xff0c;但在一些特定场景下&…...

扣子(Coze)案例:工作流生成小红书心理学卡片

大家好&#xff01;我是 Robin。专注于 AI 技术探索与实践&#xff0c;持续分享 Coze 智能体、Coze 模板&#xff0c;以及 Coze 工作流搭建案例。 工作流智能体作用&#xff1a; 输入需要生成小红书心理学知识卡片的数量&#xff0c;工作流自动批量生成图文。 首先演示一下生…...

深度理解用于多智能体强化学习的单调价值函数分解QMIX算法:基于python从零实现

引言&#xff1a;合作式多智能体强化学习与功劳分配 在合作式多智能体强化学习&#xff08;MARL&#xff09;中&#xff0c;多个智能体携手合作&#xff0c;共同达成一个目标&#xff0c;通常会收到一个团队共享的奖励。在这种场景下&#xff0c;一个关键的挑战就是功劳分配&a…...

C语言经典笔试题目分析(持续更新)

1. 描述下面代码中两个static 各自的含义 static void func (void) {static unsigned int i; }static void func(void) 中的 static 作用对象&#xff1a;函数 func。 含义&#xff1a; 限制函数的作用域&#xff08;链接属性&#xff09;&#xff0c;使其仅在当前源文件&…...

射击游戏demo11

完善地图&#xff0c;加载出装饰品&#xff0c;检测人员与地面的碰撞&#xff0c;检测子弹与岩壁的碰撞&#xff0c;检测手雷与地面的碰撞。 import pygame import sys import os import random import csv # 初始化Pygame pygame.init()# 屏幕宽度 SCREEN_WIDTH 1200 # 屏幕高…...

多智能体Multi-Agent应用实战与原理分析

一:Agent 与传统工具调用的对比 在当今的开发环境中,Agent 的出现极大地简化了工作流程。其底层主要基于提示词、模型和工具。用户只需向 Agent 输入需求,Agent 便会自动分析需求,并利用工具获取最终答案。而传统方式下,若没有 Agent,我们则需要手动编码来执行工具,还要…...

专项智能练习(定义判断)_DA_01

1. 单选题 热传导是介质内无宏观运动时的传热现象&#xff0c;其在固体、液体和气体中均可发生。但严格而言&#xff0c;只有在固体中才是纯粹的热传导&#xff0c;在流体&#xff08;泛指液体和气体&#xff09;中又是另外一种情况&#xff0c;流体即使处于静止状态&#xff0…...

关于NLP自然语言处理的简单总结

参考&#xff1a; 什么是自然语言处理&#xff1f;看这篇文章就够了&#xff01; - 知乎 (zhihu.com) 所谓自然语言理解&#xff0c;就是研究如何让机器能够理解我们人类的语言并给出一些回应。 自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff0…...

SLAM定位与地图构建

SLAM介绍 SLAM全称Simultaneous Localization And Mapping&#xff0c;中文名称同时定位与地图构建。旨在让移动设备在未知环境中同时完成以下两个任务&#xff08;定位需要地图&#xff0c;而建图又依赖定位信息&#xff0c;两者互为依赖&#xff09;&#xff1a; 定位&#…...

REST架构风格介绍

一.REST&#xff08;表述性状态转移&#xff09; 1.定义 REST&#xff08;Representational State Transfer&#xff09;是由 Roy Fielding 在 2000 年提出的一种软件架构风格&#xff0c;用于设计网络应用的通信模式。它基于 HTTP 协议&#xff0c;强调通过统一的接口&#…...

前端流行框架Vue3教程:16. 组件事件配合`v-model`使用

组件事件配合v-model使用 如果是用户输入&#xff0c;我们希望在获取数据的同时发送数据配合v-model 来使用&#xff0c;帮助理解组件间的通信和数据绑定。 &#x1f9e9; 第一步&#xff1a;创建子组件&#xff08;SearchComponent.vue&#xff09; 这个组件用于处理用户的搜…...

5月15日day26打卡

函数专题1 知识点回顾&#xff1a; 函数的定义变量作用域&#xff1a;局部变量和全局变量函数的参数类型&#xff1a;位置参数、默认参数、不定参数传递参数的手段&#xff1a;关键词参数传递参数的顺序&#xff1a;同时出现三种参数类型时 作业&#xff1a; 题目1&#xff1a;…...

Java中的深拷贝与浅拷贝

什么是拷贝 在Java中&#xff0c;拷贝是指创建一个对象的副本。拷贝主要分为两种类型&#xff1a;浅拷贝(Shallow Copy)和深拷贝(Deep Copy)。理解这两种拷贝的区别对于编写正确的Java程序非常重要&#xff0c;特别是在处理对象引用时。 浅拷贝(Shallow Copy) 浅拷贝是指创建…...

springboot AOP中,通过解析SpEL 表达式动态获取参数值

切面注解 import com.bn.document.constants.FmDeptCatalogueConstants;import java.lang.annotation.*;Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface FmDeptCatalogueAopAnnotation {/*** 权限类型*/FmDeptCatalogueConstants value();/…...

【论信息系统项目的合同管理】

论信息系统项目的合同管理 论文要求写作要点正文前言一、合同的签订管理二、合同履行管理三、合同变更管理四、合同档案管理五、合同违约索赔管理结语 论文要求 项目合同管理通过对项目合同的全生命周期进行管理&#xff0c;来回避和减轻可识别的项目风险。 请以“论信息系统项…...

redis持久化方式

一、RDB redis database&#xff1a;快照&#xff0c;某一时刻将内存中的数据&#xff0c;写入磁盘中生成1个dump.rdb文件RDB的触发方式&#xff1a; 手动触发&#xff1a;save&#xff08;阻塞主进程&#xff0c;阻塞其它指令&#xff0c;保证数据一致性&#xff09;、bgsave…...

free void* 指令

https://stackoverflow.com/questions/2182103/is-it-ok-to-free-void free(ptr) 仅释放指针指向的内存&#xff0c;不会修改指针变量本身的值。调用后&#xff0c;ptr 仍然指向原来的地址&#xff08;称为 "悬空指针"&#xff09;&#xff0c;但该地址对应的内存已…...

ADS1220高精度ADC(TI)——应用 源码

文章目录 德州仪器ADS1220概述资料引脚&封装布线寄存器配置寄存器0&#xff08;00h&#xff09;配置寄存器1&#xff08;01h&#xff09;配置寄存器2&#xff08;02h&#xff09;配置寄存器3&#xff08;03h&#xff09; 连续转换流程驱动源码ads1220.cads1220.h 德州仪器A…...

mysql-Java手写分布式事物提交流程

准备 innodb存储引擎开启支持分布式事务 set global innodb_support_axon分布式的流程 详细流程&#xff1a; XA START ‘a’; 作用&#xff1a;开始一个新的XA事务&#xff0c;并分配一个唯一的事务ID ‘a’。 说明&#xff1a;在这个命令之后&#xff0c;所有后续的SQL操…...

红黑树:数据世界的平衡守护者

在 C 算法的神秘森林里&#xff0c;红黑树是一棵充满智慧的 “魔法树”。它既不像普通二叉搜索树那样容易失衡&#xff0c;也不像 AVL 树对平衡要求那么苛刻。作为 C 算法小白&#xff0c;今天就和大家一起深入探索红黑树的奥秘&#xff0c;看看它是如何成为数据世界的平衡守护…...

哈夫曼树完全解析:从原理到应用

目录 一、核心概念 二、构造全流程解析 三、编码生成机制 四、C语言实现关键代码 五、核心特性深度解读 六、现代应用场景 七、压缩实战演示 一、核心概念 哈夫曼树&#xff08;最优二叉树&#xff09;是带权路径长度&#xff08;WPL&#xff09;最短的树形结构&#x…...

如何在 Windows 命令提示符中创建多个文件夹和多个文件

如何在 Windows 命令提示符中创建多个文件夹和多个文件 虽然大多数用户习惯使用 Windows 图形界面来创建文件夹&#xff0c;但如果你需要一次性创建多个文件夹或文件&#xff0c;如同在类Unix系统中可以使用mkdir和touch命令一样&#xff0c;windows下也有创建目录和文件的对应…...

【Java】Spring的声明事务在多线程场景中失效问题。

大家都知道Spring的声明式事务在多线程当中会失效&#xff0c;来看一下如下案例。 按照如下方式&#xff0c;b()方法抛出异常,由于父子线程导致事务失效&#xff0c;a()会成功插入,但是b()不会。 因此成功插入一条数据&#xff0c;事务失效。 Component public class UserServ…...

多平台图标设计与管理的终极解决方案

IconWorkshop Pro 是一款由Axialis团队开发的专业图标设计与制作软件&#xff0c;专注于为设计师、开发者及企业用户提供高效且灵活的图标创作解决方案。该软件凭借其强大的功能与跨平台适配性&#xff0c;成为Windows、macOS、iOS、Android等多系统图标设计的首选工具之一。 …...

【搭建Node-RED + MQTT Broker实现AI大模型交互】

搭建Node-RED MQTT Broker实现AI大模型交互 搭建Node-RED MQTT Broker实现AI大模型交互一、系统架构二、环境准备与安装1. 安装Node.js2. 安装Mosquitto MQTT Broker3. 配置Mosquitto4. 安装Node-RED5. 配置Node-RED监听所有网络接口6. 启动Node-RED 三、Node-RED流程配置1. …...

小结: js 在浏览器执行原理

浏览器多进程与多线程 现代浏览器的标签环境隔离主要通过多进程架构和多线程机制实现&#xff0c;以确保安全、性能和稳定性。以下是浏览器实现标签环境隔离的多进程和多线程交互架构的详细解析&#xff1a; ------------------- ------------------- -----------…...

C++核心编程--2 引用

引用就是给变量起别名&#xff0c;操作引用就等于操作原始变量。 2.1 引用基本用法 int var 10; int & r_var var; 2.2 注意事项 声明时必须初始化不允许更改引用指向的原始变量 2.3 引用作为函数参数传递 简化指针修饰函数参数 2.4 引用作为函数返回值 不要返回…...

音频/AI/BLE/WIFI/玩具/商业等方向的论坛网站总结

我爱音频网 我爱音频网 - 我们只谈音频&#xff0c;丰富的TWS真无线蓝牙耳机拆解报告 (52audio.com) 中国人工智能学会 中国人工智能学会 (caai.cn) AIIA人工智能网 https://www.aiiaw.com/ 世界人工智能论坛 世界人工智能论坛 - (amtbbs.org) 36氪 36氪_让一部分人先…...

告别碎片化!MCP 带来 AI Agent 开发生态的革命性突破

引言&#xff1a; 在当今的智能客服系统开发中&#xff0c;开发者常常面临一个棘手的挑战&#xff1a;需要整合用户的 CRM 数据、知识库和实时聊天记录。然而&#xff0c;由于缺乏统一的标准&#xff0c;每个团队都不得不手动实现这些集成。这不仅延长了开发周期&#xff0c;还…...

centos7部署mysql5.7

1.下载mysql的官方yum源 wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm2.安装yum源 yum -y install mysql57-community-release-el7-11.noarch.rpm3.安装秘钥文件 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-20224.安装mysql5.7…...

linux dbus

Linux D-Bus(Desktop Bus)是一种进程间通信(IPC)机制,主要用于Linux桌面环境和系统服务之间的消息传递。它允许不同的应用程序或系统组件以高效、安全的方式相互通信,是现代Linux桌面(如GNOME、KDE)的核心基础设施之一。 1. D-Bus 的核心概念 消息总线(Message Bus):…...

计量——异方差的检验及其修正

目录 1.异方差的检验 1 BP检验 2white检验 2.异方差的修正 1.异方差的检验 1 BP检验 选择检验方法&#xff1a;BP BP检验的实际步骤&#xff08;非机器&#xff09;&#xff1a; 1.y对所有x进行回归&#xff0c;得到残差u。计算残差的平方u^2 2.u^2对所有x进行回归&#…...

操作系统学习笔记第3章 内存管理(灰灰题库)

1. 单选题 某页式存储管理系统中&#xff0c;主存为 128KB&#xff0c;分成 32 块&#xff0c;块号为 0、1、2、3、…、31。某作业有 5 块&#xff0c;其页号为 0、1、2、3、4&#xff0c;被分别装入主存的 3、8、4、6、9 块中。有一逻辑地址为 [3, 70]&#xff08;其中方括号中…...

vue3项目中使用CanvasEditor开箱即用(组件的形式,组件封装好了)

canvas-editor-vue 这是canvas-editor项目的vue版本,我封装成组建了,当然了这是个已经把canvas-editor封装好的的Vue项目 项目地址GitHub地址:GitHub - aini-aini/canvas-editor-vue: this is a project than can be used in vue project as Componentthis is a project than…...

人体肢体工作识别-一步几个脚印从头设计数字生命——仙盟创梦IDE

人体肢体识别是借助计算机视觉、传感器等技术&#xff0c;对人体各肢体的位置、动作、姿态等进行检测与分析的技术。其在医疗健康、智能交互、运动训练、安全监控等多个领域具有重要价值&#xff0c; 示例代码 import cv2 import mediapipe as mp import numpy as np import c…...

【重磅】配电网智能软开关和储能联合规划

目录 1 主要内容 目标函数 数据说明 节点系统图 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现《具有源荷不平衡特性的配电网智能软开关和储能联合规划》部分模型&#xff0c;未考虑聚类分析和分布鲁棒部分&#xff0c;就智能软开关和储能联合规划部分进行了…...

实验6 电子邮件

实验6 电子邮件 1、实验目的 理解电子邮件系统基本结构 理解客户端和服务器端&#xff0c;以及服务器之间的通信 分析理解SMTP&#xff0c;POP3协议 2、实验环境 硬件要求&#xff1a;阿里云云主机ECS 一台。 软件要求&#xff1a;Linux/ Windows 操作系统 3、实验内容…...

NHANES指标推荐:OBS

文章题目&#xff1a;Association between oxidative balance score and all-cause and cancer-specific mortality among cancer survivors DOI&#xff1a;10.3389/fimmu.2025.1541675 中文标题&#xff1a;癌症幸存者氧化平衡评分与全因死亡率和癌症特异性死亡率之间的关联 …...