当前位置: 首页 > 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 实现服务的输出和输入功能&#…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

Matlab实现任意伪彩色图像可视化显示

Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中&#xff0c;如何展示好看的实验结果图像非常重要&#xff01;&#xff01;&#xff01; 1、灰度原始图像 灰度图像每个像素点只有一个数值&#xff0c;代表该点的​​亮度&#xff08;或…...

goreplay

1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具&#xff0c;可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长&#xff0c;测试它所需的工作量也会呈指数级增长。GoRepl…...