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的出现时为了弥补静态内存分配的缺点,传统数组的长度一旦定义之后,就不能更改,比如说,如果我有一个业务在这之前给分配的大小为100,但是࿰…...
基于DBSCAN密度聚类的风电-负荷场景削减方法
目录 1 主要内容 基于密度聚类的数据预处理: 场景提取: 算法流程: 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序复现文章《氢能支撑的风-燃气耦合低碳微网容量优化配置研究》第三章内容,实现的是基于DBSCAN…...
服务(第二十七篇)squid-传统、穿透、反向代理
squid代理服务器: 主要提供缓存加速、应用层过滤控制的功能。 代理的工作机制: 1、代替客户机向网站请求数据,从而可以隐藏用户的真实IP地址。 2、将获得的网页数据(静态 Web 元素)保存到缓存中并发送给客户机&#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的使用
需求: 两个label并排显示,文字内容由服务器返回,label宽度以文字内容自适应,label之间间距大于等于10. 需要考虑以下情况: 当两个label的宽度和 < 屏幕宽度时,各自设置约束,无需处理&#…...
java springboot yml文件配置 多环境yml
如果是properties改用yml,直接改后缀,原文件中的配置语法改用yml的语法即可,系统会自动扫描application.properties和application.yml文件(注意:改了之后需要maven 命令 clean一下,清个缓存)。 …...
DMBOK知识梳理for CDGA/CDGP——第一章数据管理(附常考知识点)
第一章 数据管理 第一章在 CDGA|CDGP考试中分值占比均不是很高,主要侧重点是考概念性的知识,理解数据管理的目标原则、还有与其他概念的区别点,同时掌握几个关键核心的图(车轮图、六边形图、语境关系图)。总体来说难度…...
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 中,new 和 delete 既是关键字&…...
【5.21】六、自动化测试—常见技术
目录 6.2 自动化测试常见技术 1. 录制与回放测试 2. 脚本测试 3. 数据驱动测试 6.2 自动化测试常见技术 自动化测试技术有很多种,这里介绍3种常见的技术: 1. 录制与回放测试 录制是指使用自动化测试工具对桌面应用程序或者是Web页面的某一项功能进…...
JavaScript中的事件循环机制,包括事件循环的原理、宏任务和微任务、事件队列和调用栈、以及如何优化事件循环
JavaScript中的事件循环机制是JavaScript运行引擎的核心之一,它决定了代码的执行方式和效率。本文将从几个方面介绍JavaScript中的事件循环机制,包括事件循环的原理、宏任务和微任务、事件队列和调用栈、以及如何优化事件循环。 一、事件循环的原理 事…...
【华为OD机试c++】解压报文【2023 B卷 |200分】
题目描述 为了提升数据传输的效率,会对传输的报文进行压缩处理。 输入一个压缩后的报文,请返回它解压后的原始报文。 压缩规则:n[str],表示方括号内部的 str 正好重复 n 次。 注意 n 为正整数(0 < n < 100&a…...
JS中Array的forEach、map、filter方法区别?
一:基本用法 1、forEach()函数用于对数组中的每个元素执行给定的函数,而它不返回任何值,它只是对每个元素调用传入的函数。这个函数可以接受三个参数:当前元素的值、当前元素的索引和整个数组。 const arr [1, 2, 3]; arr.forE…...
Java的Arrays类的sort()方法(41)
目录 sort()方法 1.sort()方法的格式 2.使用sort()方法时要导入的类 3.作用 4.作用的对象 5.注意 6.代码及结果 (1)代码 (2)结果 sort(&…...
Redis安装及其配置文件修改
一、redis 安装 点击即可下载 https://download.redis.io/releases/ 将下载后的包通过xftp上传到服务器 解压,我这边是解压到/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 的资源监视助手,在使用虚…...
Linus Torvalds发布了第一个Linux内核6.4候选版本
导读自Linux内核6.3发布和下一个内核系列Linux 6.4的合并窗口开放以来,已经过去了一段时间,近日,Linus Torvalds发布了第一个RC(候选发布版)的里程碑,供公众测试。 为期两周的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是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能&#…...
Anything to RealCharacters 2.5D转真人引擎效果可复现性验证:相同输入多轮输出质量评估
Anything to RealCharacters 2.5D转真人引擎效果可复现性验证:相同输入多轮输出质量评估 1. 项目概述与测试背景 Anything to RealCharacters 2.5D转真人引擎是基于通义千问Qwen-Image-Edit-2511底座和专属写实权重的图像转换系统,专门针对RTX 4090显卡…...
020驱动模型与sysfs:当你的驱动需要“见人”时
最近在调试一个车载CAN设备时遇到个怪现象:驱动能正常收发数据,但每次系统休眠唤醒后设备就丢了。查了半天发现,原来设备电源管理回调根本没被调用。老张路过我工位瞟了一眼,扔下一句话:“你这驱动没‘上户口’吧&…...
G-Helper终极指南:开源硬件性能管理工具如何彻底改变华硕设备体验
G-Helper终极指南:开源硬件性能管理工具如何彻底改变华硕设备体验 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF…...
【Docker】RedHat 7.9 企业级环境 Docker 部署实战与避坑指南
1. 企业级环境下的Docker部署挑战 在企业生产环境中部署Docker,尤其是像RedHat 7.9这样的传统Linux发行版,会遇到不少特有的挑战。我经历过多次这样的部署过程,深知其中可能遇到的坑。不同于个人开发环境,企业级部署需要考虑稳定性…...
OpenClaw多任务队列管理:千问3.5-27B并行处理技巧
OpenClaw多任务队列管理:千问3.5-27B并行处理技巧 1. 为什么需要任务队列管理 上个月我尝试用OpenClaw自动处理200多份PDF文档的摘要生成任务,结果遭遇了典型的"暴力调度"问题——所有任务同时发起请求,导致千问3.5-27B模型实例直…...
循环神经网络:浅析RNN、LSTM与BiLSTM的算法思想
NLP-AHU-015 本文配图LSTM部分搬运了Understanding LSTM Networks -- colahs blog 循环神经网络是深度学习领域中处理序列数据的核心架构,通过引入循环连接机制,使网络能够处理具有时间依赖关系的序列数据。然而,传统RNN在长序列训练中面临…...
MongoDB EF Core 提供程序中的可查询加密和向量搜索
ngoDB Entity Framework (EF) Core 提供程序自 2024 年 5 月起正式发布。自发布以来,我们欣喜地看到 .NET 开发人员社区给予了积极的反馈,并且该提供程序在各种应用程序中得到了越来越广泛的采用。 该提供商使开发人员能够利用 LINQ 查询、更改跟踪和乐…...
mujoco无人机实战建模(二)
前言 我们先复习一下我们的建模顺序 1.全局环境搭建 2.资源准备 3.骨架构建 4.定义自由度(Joints)5.添加形状(Geoms)6添加约束与传动 7 添加动力 8 添加观测 如果有忘记的伙伴可以去看我的第一篇文章mujoco建模(一) 我们这篇文…...
突破抖音直播回放下载限制:5大技术创新与3大实战场景全解密
突破抖音直播回放下载限制:5大技术创新与3大实战场景全解密 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback …...
【优化设计】基于人工蜂群算法机械设计优化附Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。👇 关注我领取海量matlab电子书和数学建模资料🍊个人信条:格物致知,完整Matl…...
