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

C:入门级积累(4)


(int *)malloc(10 * sizeof(int))memory allocate动态分配内存,malloc的出现时为了弥补静态内存分配的缺点,传统数组的长度一旦定义之后,就不能更改,比如说,如果我有一个业务在这之前给分配的大小为100,但是,我现在由于业务数量的增长,原来的大小就无法满足。静态分配不能跨函数调用,就是无法在另一个函数中,来管理一个函数中的内存。静态分配,只在当前函数有效,当静态分配所在的函数运行完之后,该变量就不能被其他的函数所调用。
加(int *)的目的是让计算机知道,如何去划分这个开辟的空间,因为char,int,long这些类型的字节大小是不一样的,我们知道了
首地址,还要知道是以几个字节为单元。所以这句话一共开辟了10*8个字节,这也就是为什么写sizeof(int)的原因,因为指针变量的长度是跟随计算机走的
void free(void *)C语言中释放内存空间的函数,通常与申请内粗空间的函数malloc结合使用,可以释放由malloc,calloc,realloc。ptr指针指向一个要释放的内存的内存块,该内存块之前是通过调用上述三个函数进行分配的。如果传递的参数是一个空指针,则不会执行任何动作。
void* calloc(size_t num ,size_t size)calloc函数也是与free函数配套使用的,使用方式与malloc基本相同,也是在堆区中申请动态内存空间,头文件为stdlib.h,返回类型为空指针,size_t num 为元素个数,size_t size为每个元素的字节大小,与malloc的区别,参数使用方式不同。malloc的使用效率较高,因为calloc在返回在堆区中申请的那块动态内存的起始之前---https://blog.csdn.net/weixin_63449996/article/details/124363422
realloc
内存重叠
静态分配的变量在函数执行完毕之后自动,该内存会自动释放。静态分配的内存,是在栈中分配的。传统数组(静态分配),不能手动释放,只能等待系统释放。
https://blog.csdn.net/sinat_29957455/article/details/60883355
动态分配的变量动态分配通过malloc分配,是在堆中分配的,对不是一种数据结构,它是一种排序方式,堆排序
https://blog.csdn.net/sinat_29957455/article/details/60883355
extern void* memset(
  void* __s,
  int __c,
  size_t __n)
memset(rstar, 0x00,sizeof(int)*10);
sizeof()
条件编译器#if #ifdef #ifndef,#endif,#else,#elif条件编译(condition compiling)命令指定预处理器依据特定的条件来判断保留或删除某段源代码,例如可以使用条件编译让源代码适用于不同的目标系统,而不需要管理该源代码的各种不同版本,预处理器会依次计算条件表达式,直到发现结果非0(也就是true)的条件表达式,预处理器会保留对应组内的源代码。一共后续处理,如果找不到值为true的表达式,并且该条件编译区域中包含#else命令,则保留#else命令内的代码。在预处理阶段结束时,没有被预处理器保留以用于后续处理的组会从程序中全部删掉。http://c.biancheng.net/view/449.html
defined
#define简单的宏定义:#define 标识符 替换列表(替换列表可以是数,字符串字面量,标点符号,运算符,标识符,关键字,字符常量,注意替换列表是可以为空的)
#undef取消某个宏定义
_Thread_local(C11新增)语义上就是线程的私有变量._Thread_local是新的存储类修饰符, 限定了变量不能在多线程之间共享。https://c.tedu.cn/notes/221985.html
线程存储类说明符。https://m.php.cn/manual/view/34232.html
_Static_assert(C11新增)编译器期间断言,当#if #error 预编译之后,编译器断言,assert是运行时断言,用的时候看具体的需求:https://c.tedu.cn/notes/221985.html
_Noreturn(C11新增)修饰函数句对不会有返回值,_Noreturn 声明的函数不会返回。引入此新的函数修饰符有两个目的:消除编译器对没有return的函数的警告,允许某种只针对不返回函数的优化:https://c.tedu.cn/notes/221985.html
_Generic(C11新增)C的泛型机制,高级函数宏:https://c.tedu.cn/notes/221985.html
_Generic ( assignment-expression , generic-assoc-list )
assignment-expression:赋值表达式,既传入_Generic函数的变量
generic-assoc-list:对赋值表达式产生的结果变量进行类型判断,并执行对此结果变量的执行函数
_Generic(a + 0.1f, int : b, float : c, default : b)++;
以上表达式:输入第一个参数为:a+0.1f  输出结果类型为浮点型,由于结果变量为float类型,将执行float:c这个类型和执行函数对,假设c值为2,最终c值输出为3
更过请参考:https://blog.csdn.net/qq_31243065/article/details/80904613
如果是switch case 是值判断,那么_Generic就是类型判断,执行对应的函数操作
_Atomic(C11新增)原子操作,原子锁:https://c.tedu.cn/notes/221985.html
c语言新增的类型限定符,不过编译器必须支持这一新特性
并发程序设计把程序执行分成可以同时执行的多个线程,这程序设计带来了新的挑战,包括如何管理访问相同数据的不同线程。C11通过包含可选的头文件stdatomic.h和thread.h,提供了一些可选的不是必须实现的管理办法,值得注意的是,要通过各种宏函数访问原子类型。当一个线程对一个原子类型的对象执行原子操作时,其他线程不能访问该对象。
所谓原子操作,就是该操作绝对不会在执行完毕前被任何其他事务或事件打断,也就是说,它的最小的执行单位,不可能有比它更小的执行单位,因此智利的原子实际是使用了物理学里面物质微粒的概念。
所以这里所说的原子操作,基本都包含我们三个方面所关心的语义:
Atomicity:操作本身是不可分割的
Visibility:一个线程对某个数据的操作何时对另外一个线程可见
Ordering:执行的顺序是否可以被重排
这有点类似互斥对象对共享资源的保护,但是原子操作更加接近底层,因为效率更高
参考:https://blog.csdn.net/Galaxy_Robot/article/details/106991200
ATOMIC_VAR_INIT(value) (value)(自C11以来)初始化一个新的atomic_flag(宏常量)
扩展为一个表达式,可以用来初始化一个与之类型相同的原子变量value。未使用此初始化的自动存储持续时间的源自对象的初始值未定义,但是,静态和线程局部变量的默认(零)初始化会生成有效值
如果这个宏不用于初始化一个原子变量,那么在从另一个线程初始化(即使通过一个原子操作)期间,任何访问数据竞争(如果地址通过memory_order_relaxed操作立即传递给另一个线程,则可能发生):https://m.php.cn/manual/view/34183.html
原子操作原子操作指的是对原子对象的读和写是不可被打断的,一个操作不可被打断意味着在执行整个操作过程中,即使有一个硬件中断信号过来,该中断信号也不能立即触发处理器的中断执行例程处理器必须执行完整条原子操作之后才可以进入中断执行例程
对于来自多个处理器核心对同一个存储空间的访问,存储器控制器回去仲裁当前那个原子操作先进行方寸操作,哪个后执行,这些访存操作都会被串行化
所以原子对象往往用于多核多线程并行计算中对多个线程共享变量的计算
参考:https://www.jianshu.com/p/606c4f2bae52
原子类型用_Atomic(类型名) 这种方式修饰的类型是原子类型,在实际使用原子类型时应当避免直接使用_Atomic (类型名)这种形式,而是直接用<stdatomic.h>头文件中已经定义好的原子类型。此外该头文件还有相应的原子操作函数。
参考:https://www.jianshu.com/p/606c4f2bae52
原子函数c语言中的原子操作是指在执行期间不会被中断的操作,这种操作通常用于多线程编程,以确保线程安全和数据的一致性。在C语言中原子操作可以通过使用特殊的函数来实现。C语言中的原子操作函数通常以atomic_开头。这些函数可以用于执行各种原子操作,例如读取和写入变量,增加和减少变量的值等。以下是一些常用的原子操作:
1.atomic_load:用于读取变量的值,并确保在读取期间不会被其他线程修改
2.atomic_store:用于将值写入变量,并确保写入期间不会被其他线程修改
3.atomic_add:用于将一个值加到变量中,并确保在加法期间不会被其他线程修改
4.atomic_sub:用于将一个值从变量中减去,并确保在减法期间不会被其它线程修改
5.atomic_exchange:用于交换两个变量的值,并确保在期间不会被其它线程修改
6.atomic_compare_exchange:用于比较两个变量的值,并在它们相等时将一个新值写入其中一个变量。这个操作可用于实现比较并交换
使用原子操作可以避免多线程编程中的静态条件和死锁问题,例如,如果两个线程同时尝试写入同一个变量那么可能会发生竞态条件,导致变量的值不确定。但是,如果使用原子操作来执行写入操作,那么只有一个线程能够成功的写入变量,从而避免了竞态条件
原子操作还可以用于实现锁和信号量等同步机制。例如,可以使用原子操作来实现一个简单的自旋锁。
参考https://wenku.baidu.com/view/a10982e987868762caaedd3383c4bb4cf7ecb783.html

tips: 你错过了那么可爱善良温柔漂亮性感聪明活好的女朋友,我要是你,我就选择自杀。

相关文章:

C:入门级积累(4)

(int *)malloc(10 * sizeof(int))memory allocate动态分配内存,malloc的出现时为了弥补静态内存分配的缺点&#xff0c;传统数组的长度一旦定义之后&#xff0c;就不能更改&#xff0c;比如说&#xff0c;如果我有一个业务在这之前给分配的大小为100&#xff0c;但是&#xff0…...

基于DBSCAN密度聚类的风电-负荷场景削减方法

​目录 ​ 1 主要内容 基于密度聚类的数据预处理&#xff1a; 场景提取&#xff1a; 算法流程&#xff1a; 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序复现文章《氢能支撑的风-燃气耦合低碳微网容量优化配置研究》第三章内容&#xff0c;实现的是基于DBSCAN…...

服务(第二十七篇)squid-传统、穿透、反向代理

squid代理服务器&#xff1a; 主要提供缓存加速、应用层过滤控制的功能。 代理的工作机制&#xff1a; 1、代替客户机向网站请求数据&#xff0c;从而可以隐藏用户的真实IP地址。 2、将获得的网页数据&#xff08;静态 Web 元素&#xff09;保存到缓存中并发送给客户机&#x…...

golang yaml 解析问题

golang 中解析 yaml 格式内容可以使用 yaml.v3 库来解决。下载 go 依赖 go get -u gopkg.in/yaml.v31. 示例 yaml 数据 config_mail_template:description: 验证码one: Verification Codeother: Verification Codeconfig_mail_template_reset_code:description: 重置密码one:…...

setContentHuggingPriority和setContentCompressionResistancePriority的使用

需求&#xff1a; 两个label并排显示&#xff0c;文字内容由服务器返回&#xff0c;label宽度以文字内容自适应&#xff0c;label之间间距大于等于10. 需要考虑以下情况&#xff1a; 当两个label的宽度和 < 屏幕宽度时&#xff0c;各自设置约束&#xff0c;无需处理&#…...

java springboot yml文件配置 多环境yml

如果是properties改用yml&#xff0c;直接改后缀&#xff0c;原文件中的配置语法改用yml的语法即可&#xff0c;系统会自动扫描application.properties和application.yml文件&#xff08;注意&#xff1a;改了之后需要maven 命令 clean一下&#xff0c;清个缓存&#xff09;。 …...

DMBOK知识梳理for CDGA/CDGP——第一章数据管理(附常考知识点)

第一章 数据管理 第一章在 CDGA|CDGP考试中分值占比均不是很高&#xff0c;主要侧重点是考概念性的知识&#xff0c;理解数据管理的目标原则、还有与其他概念的区别点&#xff0c;同时掌握几个关键核心的图&#xff08;车轮图、六边形图、语境关系图&#xff09;。总体来说难度…...

065:cesium设置带有箭头的线材质(material-9)

第065个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置带有箭头的线材质,请参考源代码,了解PolylineArrowMaterialProperty的应用。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共82行)相关API参考…...

Java常用API

1 常用API API(:Application Programming Interface ):应用程序编程接口1.1 Math类 Math中没有构造方法,类的成员都是静态的(static修饰),通过类名就可以直接调用常用方法方法名说明public static int abs(int a)获取参数a的绝对值public static double ceil(double a) …...

【C++ 学习 ⑥】- C++ 动态内存管理详解

目录 一、new 表达式和 delete 表达式的工作机理 二、operator new 和 operator delete 函数 2.1 - 标准库定义 2.2 - 重载 三、定位 new 表达式 四、常见面试题 4.1 - malloc/free 和 new/delete 的区别 4.2 - 内存泄漏 在 C 中&#xff0c;new 和 delete 既是关键字&…...

【5.21】六、自动化测试—常见技术

目录 6.2 自动化测试常见技术 1. 录制与回放测试 2. 脚本测试 3. 数据驱动测试 6.2 自动化测试常见技术 自动化测试技术有很多种&#xff0c;这里介绍3种常见的技术&#xff1a; 1. 录制与回放测试 录制是指使用自动化测试工具对桌面应用程序或者是Web页面的某一项功能进…...

JavaScript中的事件循环机制,包括事件循环的原理、宏任务和微任务、事件队列和调用栈、以及如何优化事件循环

JavaScript中的事件循环机制是JavaScript运行引擎的核心之一&#xff0c;它决定了代码的执行方式和效率。本文将从几个方面介绍JavaScript中的事件循环机制&#xff0c;包括事件循环的原理、宏任务和微任务、事件队列和调用栈、以及如何优化事件循环。 一、事件循环的原理 事…...

【华为OD机试c++】解压报文【2023 B卷 |200分】

题目描述 为了提升数据传输的效率&#xff0c;会对传输的报文进行压缩处理。 输入一个压缩后的报文&#xff0c;请返回它解压后的原始报文。 压缩规则&#xff1a;n[str]&#xff0c;表示方括号内部的 str 正好重复 n 次。 注意 n 为正整数&#xff08;0 < n < 100&a…...

JS中Array的forEach、map、filter方法区别?

一&#xff1a;基本用法 1、forEach()函数用于对数组中的每个元素执行给定的函数&#xff0c;而它不返回任何值&#xff0c;它只是对每个元素调用传入的函数。这个函数可以接受三个参数&#xff1a;当前元素的值、当前元素的索引和整个数组。 const arr [1, 2, 3]; arr.forE…...

Java的Arrays类的sort()方法(41)

目录 sort&#xff08;&#xff09;方法 1.sort&#xff08;&#xff09;方法的格式 2.使用sort&#xff08;&#xff09;方法时要导入的类 3.作用 4.作用的对象 5.注意 6.代码及结果 &#xff08;1&#xff09;代码 &#xff08;2&#xff09;结果 sort&#xff08;&…...

Redis安装及其配置文件修改

一、redis 安装 点击即可下载 https://download.redis.io/releases/ 将下载后的包通过xftp上传到服务器 解压&#xff0c;我这边是解压到/usr/local目录下 -- 创建路径 mkdir /usr/local/redis -- 解压 tar -zxvf redis-4.0.0.tar.gz -C /usr/local/redis 为防止编译失败&am…...

VSOMEIP3抓包数据

环境 $ cat /etc/os-release NAME"Ubuntu" VERSION"20.04.6 LTS (Focal Fossa)" IDubuntu ID_LIKEdebian PRETTY_NAME"Ubuntu 20.04.6 LTS" VERSION_ID"20.04" HOME_URL"https://www.ubuntu.com/" SUPPORT_URL"https:/…...

基于PyQt5的图形化界面开发——Windows内存资源监视助手[附带编译exe教程]

基于PyQt5的图形化界面开发——Windows内存资源监视助手[附带编译exe教程] 0. 前言1. 资源信息获取函数——monitor.py2. UI界面——listen.py3. main.py4. 运行效果5. 编译 exe 程序6. 其他PyQt文章 0. 前言 利用 PyQt5 开发一个 windows 的资源监视助手&#xff0c;在使用虚…...

Linus Torvalds发布了第一个Linux内核6.4候选版本

导读自Linux内核6.3发布和下一个内核系列Linux 6.4的合并窗口开放以来&#xff0c;已经过去了一段时间&#xff0c;近日&#xff0c;Linus Torvalds发布了第一个RC&#xff08;候选发布版&#xff09;的里程碑&#xff0c;供公众测试。 为期两周的Linux内核6.4合并窗口现已关闭…...

由浅入深Dubbo核心源码剖析环境介绍

目录 1 框架介绍1.1 概述1.2 运行架构1.3 整体设计 2 环境搭建2.1 源码拉取2.2 源码结构2.3 环境导入2.4 测试2.5 管理控制台 1 框架介绍 1.1 概述 Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架&#xff0c;使得应用可通过高性能的 RPC 实现服务的输出和输入功能&#…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...