浅谈C和C++中的资源释放
一、简介
本文主要探究在C/C++
中关于资源释放的有效途径。
作为一名程序员,本人的日常工作主要涉及Linux
平台下的嵌入式软件开发。在实际的开发过程中,经常困扰我的一件事就是如何实现资源(应该对资源有一个界定)的有效回收,避免内存泄漏,从而保证程序的稳定性。
本文主要探究在C/C++
中关于资源释放的有效途径。
作为一名程序员,本人的日常工作主要涉及Linux
平台下的嵌入式软件开发。在实际的开发过程中,经常困扰我的一件事就是如何实现资源(应该对资源有一个界定)的有效回收,避免内存泄漏,从而保证程序的稳定性。
太宰治(だざい おさむ,1909年6月19日—1948年6月13日),本名津岛修治(つしま しゅうじ),日本小说家,日本战后无赖派文学代表作家。主要作品有小说《逆行》、《斜阳》和《人间失格》等。
传奇里的倾国倾城的人大抵如此。
到处都是传奇,可不见得有这么圆满的收场。胡琴咿咿哑哑拉着,在万盏灯的夜晚,拉过来又拉过去,说不尽的苍凉的故事——不问也罢!
白流苏和范柳原这一对现实庸俗的男女,在战争的兵荒马乱之中被命运掷骰子般地掷到了一起,于“一刹那”体会到了“一对平凡的夫妻”之间的“一点真心”。
本书收录张爱玲于一九四三年至一九四四年创作的中短篇小说,包括《第一炉香》《第二炉香》《茉莉香片》《心经》等。
——《倾城之恋》豆瓣读书
…
看久了方才看到那寂静的面庞上有一条筋在那里缓缓地波动,从腮部牵到太阳心——原来她在那里吃花生米呢,红而脆的花生米衣子,时时在嘴角掀腾着。
薇龙突然不愿意看下去了,掉转身子,开了衣橱,人靠在橱门上。衣橱里黑沉沉的,丁香末子香得使人发晕。那里面还是悠久的过去的空气,温雅、幽闲、无所谓时间。衣橱里可没有窗外那爽朗的清晨,那板板的绿草地,那怕人的寂静的脸,嘴角那花生衣子……那肮脏、复杂,不可理喻的现实。
…
——《第一炉香》(pp. 19-20). Kindle 版本.
该仓库旨在提供一个针对于小型的C/C++
项目的makefile
模板。使用该模板,能够实现一键编译,无需再编写繁琐的makefile
文件。
关于该makefile文件的工作过程中,在文件中都有一个详细的说明,可以参见该文件。
Github项目地址: MakeFileTemplate
在实际的工程实践中,面对需要程序短暂休眠的情况,我们通常想到的可能是sleep(),usleep(),nanosleep()等函数。但是,在最近阅读代码的过程中,经常会看到使用select()达到延时的目的。本着追根求源(钻牛角尖)的原则,本篇博文,旨在通过具体的实验以及原理分析,从而找出在linux
中,关于程序休眠的最佳实践。
在实际工作过程中,有时需要我们对一些临时性的工作进行处理,传统的处理方式可能是:在一个工作线程中不断轮训相应时间标志,置位则执行,反之则取消。但是对于一些连贯性动作,或是在调用第三方接口时,可能无法适时终止相应执行流。为了解决以上问题,该仓库封装了一个C++类,通过调用相关对象,可以创建或是取消一个临时线程。
该仓库旨在为 C/C++
的开发人员提供一套符合 Doxygen 注释风格的SourceInsight 宏。具体的宏实现基于 quicker.em 。
该仓库的具体工作主要是在原有 quicker.em 的基础上,根据 Source Insight 宏语言 语法要求,对其原有功能的扩展,新增功能见下文。
GitHUb项目地址: Source_Insight_Macro_DoxygenFormat
在以往的工作中,曾遇到以下需求:可以随意的打开或是屏蔽已运行进程的输出。
通过查询相关博客以及开源项目,最终选择ptrace
作为最终的实现手段。从理解到最终应用的过程中,以下博客:Playing with ptrace (作者:Pradeep Padaia)起到了答疑解惑的作用,本文介绍了该博文的主要内容,并在此基础上加入了个人的一些理解与修改。
此外,原文代码是在i386上运行,而本人所用为64位机,因此对原有代码进行了移植。
你曾对系统调用是怎样被中断的而感到好奇么?你曾尝试通过改变系统调用的参数,来愚弄内核么?你曾经想过调试器是如何暂停正在运行的进程,转而由你获得控制权么?
如果你正在尝试用复杂的内核编程来完成任务,可以重新考虑使用Linux提供的一种优雅的机制——ptrace
系统调用,来完成这些任务。ptrace
提供了一种使得 Tracer 可以观察并控制 Tracee 的机制。该机制可以检测并改变 Tracee 的内核镜像以及寄存器,其主要被用来实现断点调试以及对系统调用的追踪。
在本篇文章中,我们将会了解如何阻止一个系统调用,同时改变它的参数。而在下篇文章中,我们将学习更高级的技术——向一个运行中的程序中设置断点或是注入一段代码。如此一来,我们就可以一窥 Tracee 的寄存器以及数据段,并修改内容。此外,本文也会介绍使得 Tracee 可以被停止并执行任意指令的方式。