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

c语言自动内存回收(RAII实现)

简述

什么是RAII

RAII(Resource Acquisition Is Initialization)是c++之父Bjarne Stroustrup提出的概念。资源一般分三个步骤:获取、使用和销毁,而在自由使用内存的c语言中,资源的销毁常常是程序员容易遗漏的事情,让程序自动销毁资源也成为了业界的常规方案。

c实现

#define RAII_FREE(FreeFunc) __attribute__((cleanup(FreeFunc)))

以上代码使用了编译属性__attribute__,在函数退出后自动回收资源,使用方式如下:

void MemFreeL2PointerAndSetNull(void *ptr)
{void **pptr = (void **)ptr;free(*pptr);
}void TestFunc()
{/* 入参是析构函数,在malloc资源时也指定free要使用的函数,尽量不在宏中写函数,减少后续定位的复杂度,并且也满足malloc和free的配对出现,可读性更好 */RAII_FREE(MemFreeL2PointerAndSetNull) TestObj *obj = (TestObj *)malloc(sizeof(TestObj));obj->grade = 1;
}

考虑到__attribute__是编译属性,笔者调研了几款常见编译器,支持程度如下:

编译器是否支持参考
GCC支持https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html
Clang支持https://clang.llvm.org/docs/AttributeReference.html
MSVC不支持,可以通过 _try 和 _finally 关键字实现类似的功能https://learn.microsoft.com/en-us/cpp/c-language/try-finally-statement-c?view=msvc-170

扩展

  • 智能指针:FreeFunc中加入引用技术,则可实现c++中的智能指针功能

参考

RAII in C: cleanup gcc compiler extension

相关文章:

c语言自动内存回收(RAII实现)

简述 什么是RAII RAII(Resource Acquisition Is Initialization)是c之父Bjarne Stroustrup提出的概念。资源一般分三个步骤:获取、使用和销毁,而在自由使用内存的c语言中,资源的销毁常常是程序员容易遗漏的事情&…...

Node.js的简单学习一-----未完待续

文章目录前言学习目标一、初识Node.js1.1 回顾与思考1.1.1 需要掌握那些技术1.1.2 浏览器中的JavaScript的组成部分1.2 Node.js简介1 什么是Node.js2 Node.js中的JavaScript运行环境3 Node.js 可以做什么1.3 Node.js环境的安装1.4 在Node.js环境中执行JavaScript 代码终端中的快…...

linux入门---粘滞位

为什么会有粘滞位 一台服务器有很多人使用,每个人在机器上都会有一个家目录,在家目录里可以实现自己想要的操作,但是有时候我们需要一个公共路径来完成一些操作,比如说资料分享产生临时文件的增删查改等等,这就好比我…...

关于正则表达式的讲解

以下内容源于《linux命令行与shell脚本编程大全【第三版】》一书的整理。 在shell脚本中成功运用sed编辑器和gawk程序的关键,在于熟练地使用正则表达式。 一、正则表达式的简介 1、正则表达式的定义 正则表达式(regular expression)是一个…...

贝塞尔曲线与B样条曲线

文章目录0.参考1.问题起源与插值法的曲线拟合1.1.问题起源1.2.拉格朗日插值1.3.“基”的概念1.4.插值存在的Runge现象2.贝塞尔曲线2.1.控制点的思想2.2.由控制点生成贝塞尔曲线2.3.多个控制点时的贝塞尔曲线公式2.4.贝塞尔曲线的递推公式2.5.贝塞尔曲线的性质3.B样条曲线3.1.B样…...

C语言-基础了解-24-C头文件

C头文件 一、C 头文件 头文件是扩展名为 .h 的文件,包含了 C 函数声明和宏定义,被多个源文件中引用共享。有两种类型的头文件:程序员编写的头文件和编译器自带的头文件。 在程序中要使用头文件,需要使用 C 预处理指令 #include…...

The 19th Zhejiang Provincial Collegiate Programming Contest vp

和队友冲了这场,极限6题,重罚时铁首怎么说,前面的A题我贡献了太多的罚时,然后我的G题最短路调了一万年,因为太久没写了,甚至把队列打成了优先队列,没把head数组清空完全,都是我的锅呜…...

用于<分类>的卷积神经网络、样本不平衡问题的解决

输入图像——卷积层——池化层——全连接层——输出 卷积层:核心,用来提取特征。 池化层:对特征降维。实际的主要作用是下采样,减少参数量来提高计算速度。 卷积神经网络的训练:前向传播(分类识别&#xf…...

网上订餐管理系统的设计与实现

技术:Java、JSP等摘要:随着信息技术的广泛使用,电子商务对于提高管理和服务水平发挥着关键的作用。越来越多的商家开始着手于电子商务建设。电子商务的发展为人们的生活提供了极大的便利,也成为现实社会到网络社会的真实体现。当今…...

Httpclient测试

在IDEA中有一个非常方便的http接口测试工具httpclient,下边介绍它的使用方法,后边我们会用它进行接口测试。如果IDEA版本较低没有自带httpclient,需要安装httpclient插件1.插件2.controller进入controller类,找到http接口对应的方…...

EXCEL里的各种奇怪计算问题:数字后面自动多了 0.0001, 数字后面位数变成000,以及一些取整,数学函数

1 公式计算后的数,用只粘贴数值后,后面自动多了 0.0001,导致不再是整数的问题 问题入戏 见第1个8400,计算时就出现了问题,按正常,这里8400应该是整数,而不应该带小数,但是确实就计…...

PHP CRUL请求GET、POST

// GET请求 public function curlGet($url,$header){ $ch curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_s…...

Oracle技术分享 exp导数据时报错ORA-01578 ORA-01110

问题描述:exp导数据时报错ORA-01578 ORA-01110,如下所示: 数据库:oracle 19.12 多租户 1、异常重现 [oracledbserver ~]$ exp ora1/ora1orclpdbfileemp.dmp tablesemp logexp.log Export: Release 19.0.0.0.0 - Production onS…...

Maven学习笔记

目录1 概述1.1 Maven是什么1.2 作用1.2.1 构建1.3 jar包是什么2 下载及配置2.1 下载2.2 配置环境变量3 基本概念3.1 仓库3.2 坐标3.2.1 概念3.2.2 如何获取指定jar包的坐标3.3 项目结构3.3.1 普通java项目的目录结构3.3.2 java web项目的目录结构3.4 项目构建命令4 IDEA中创建M…...

654. 最大二叉树

题目 leetcode题目地址 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大值 右边 的 子数组后缀上 构建右子树。 返…...

快速幂----快速求解底数的n次幂

目录 一.快速幂 1.问题的引入 2.快速幂的介绍 3.核心思想 4.代码实现 2.猴子碰撞的方法数 1.题目描述 2.问题分析 3.代码实现 一.快速幂 1.问题的引入 问题:求解num的n次幂,结果需要求余7 对于这个问题我们可能就是直接调用函数pow(a,b)来直接求解a的b次幂问题,但是如果…...

【FMCW 04】测角-Angle FFT

在之前的文章中,我们已经详尽讨论过FMCW雷达测距和测速的原理,现在来讲最后一块内容,测角。测角对于硬件设备具有要求,即要求雷达具有多发多收结构,从而形成多个空间信道(channel),我…...

Linux操作系统学习(线程同步)

文章目录线程同步条件变量生产者与消费者模型信号量环形队列应用生产者消费者模型线程同步 ​ 现实生活中我们经常会遇到同一个资源多个人都想使用的问题,例如游乐园过山车排队,玩完的游客还想再玩,最好的办法就是玩完的游客想再玩就去重新排…...

了解动态规划算法:原理、实现和优化指南

动态规划 详细介绍例子斐波那契数列最长回文子串优化指南优化思路斐波那契数列优化最长回文子串优化详细介绍 动态规划(Dynamic Programming,简称 DP)是一种通过将原问题拆分成子问题并分别求解这些子问题来解决复杂问题的算法思想。 它通常用于求解优化问题,它的核心思想…...

《NFL橄榄球》:明尼苏达维京人·橄榄1号位

明尼苏达维京人(英语:Minnesota Vikings)是一支职业美式足球球队,位于明尼苏达州的明尼阿波利斯。他们现时在国家橄榄球联合会北区参与国家美式足球联盟比赛。该球队本为美国美式足球联盟(AFL)的球队。但是…...

NotebookLM技能集成:自动化文档问答与RAG应用实践

1. 项目概述:当NotebookLM遇上自定义技能最近在折腾AI工具链的时候,发现了一个挺有意思的项目:jasontsaicc/notebooklm-studio-skill。乍一看这个名字,你可能和我最初的反应一样,有点摸不着头脑。NotebookLM我知道&…...

Squirrel-RIFE实战指南:7步掌握AI视频补帧核心技术

Squirrel-RIFE实战指南:7步掌握AI视频补帧核心技术 【免费下载链接】Squirrel-RIFE 效果更好的补帧软件,显存占用更小,是DAIN速度的10-25倍,包含抽帧处理,去除动漫卡顿感 项目地址: https://gitcode.com/gh_mirrors/…...

手势控制音乐手套:用Circuit Playground Express与MakeCode实现交互式声音合成

1. 项目概述与核心价值如果你对嵌入式开发、创意编程或者互动艺术装置感兴趣,那么将物理世界的动作转化为声音,绝对是一个能让你兴奋起来的项目。今天要聊的,就是如何用一块比手掌还小的开发板——Circuit Playground Express(后面…...

Diablo Edit2:暗黑破坏神2角色存档编辑器的终极指南

Diablo Edit2:暗黑破坏神2角色存档编辑器的终极指南 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 你是否曾经在暗黑破坏神2中花费数小时刷装备却一无所获?是否因为技能点…...

Netflix 4K画质与杜比音效优化指南:解锁你的流媒体最佳体验

Netflix 4K画质与杜比音效优化指南:解锁你的流媒体最佳体验 【免费下载链接】netflix-4K-DDplus MicrosoftEdge(Chromium core) extension to play Netflix in 4K(Restricted)and DDplus audio 项目地址: https://gitcode.com/gh_mirrors/n…...

国产多模态新星:mPLUG-Owl全解析,从原理到落地

国产多模态新星:mPLUG-Owl全解析,从原理到落地 引言 在ChatGPT引爆文本大模型之后,多模态大模型正成为AI领域的下一个主战场。在这场全球竞赛中,国产模型的表现尤为引人注目。由阿里通义实验室推出的 mPLUG-Owl,凭借…...

ElevenLabs声音库资源推荐,从免费层到企业级Tier 4权限全解锁:含3个已下架但仍在灰度测试的传奇音色

更多请点击: https://intelliparadigm.com 第一章:ElevenLabs声音库资源推荐 ElevenLabs 提供了业界领先的高质量语音合成服务,其声音库涵盖多语种、多风格及可定制化角色音色。官方声音库分为三类:预置语音(Prebuilt…...

Windows: 深入剖析pip install SSLError与SSL模块缺失的根源及系统级修复

1. Windows下pip install SSLError的典型表现 最近在Windows系统上用pip安装Python包时,不少朋友都遇到了这样的报错信息:"Cant connect to HTTPS URL because the SSL module is not available"。这个错误通常会出现在使用清华源、阿里云源等…...

HsMod终极指南:50+功能全面解锁炉石传说模改插件

HsMod终极指南:50功能全面解锁炉石传说模改插件 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是一款基于BepInEx框架开发的炉石传说模改插件,通过50多项实用…...

LaTeX-PPT:PowerPoint公式编辑效率提升400%的终极解决方案

LaTeX-PPT:PowerPoint公式编辑效率提升400%的终极解决方案 【免费下载链接】latex-ppt Use LaTeX in PowerPoint 项目地址: https://gitcode.com/gh_mirrors/la/latex-ppt 还在为PowerPoint中编辑复杂数学公式而头痛吗?LaTeX-PPT这款开源插件将彻…...