C/C++
文章平均质量分 76
wustdatamining
这个作者很懒,什么都没留下…
展开
-
用C++实现锁的自动释放
我在做多核核多任务程序时,常遇到这样一个问题:为了互斥访问我会习惯性的手动加锁,但却老是养不成手动解锁的习惯,其实很多时候也不是自己养不成,主要是多核下任务量一多,复杂性就跟着起来,是不是的就给忘了,我能咋办呢?想来想去,也参考了一些资料,想到C++中不是有析构函数么?析构函数是可以自动被调用的,把锁的释放工作放到析构函数中去,这样不是可以自动完成锁的自动释放工作了,这是多么的完美!当然还有很多情转载 2012-04-28 09:44:14 · 4039 阅读 · 0 评论 -
Linux多线程函数解析
Linux多线程函数用得比较多的是下面的3个:pthread_create()pthread_exit() pthread_join();它们都是在头文件之中。编译时需要加静态库-lpthread函数的说明如下:(一) pthread_create是UNIX环境创建线程函数 int pthread_create( pthread_t *re转载 2012-05-18 19:48:33 · 362 阅读 · 0 评论 -
C/C++中的经典垃圾回收算法概论
1.引用计数( Reference Counting )算法 最容易想到的就是这个了,我们拿餐巾纸的例子来说,这种算法的原理大致可以描述为: 午餐时,为了把脑子里突然跳出来的设计灵感记下来,我从餐巾纸袋中抽出一张餐巾纸,打算在上面画出系统架构的蓝图。按照“餐巾纸使用规约之引用计数版”的要求,画图之前,我必须先在餐巾纸的一角写上计数值 1 ,以表示我在使用这张餐巾纸。这时原创 2012-04-29 08:20:28 · 792 阅读 · 0 评论 -
讨厌"的Shell"可爱"的C----用C偷取Shell的结果输
我自己很喜欢用C语言,也羡慕小王老是说的那个shell这强大,那强大.一直不服他,凭啥这么说,有C语言强大么,C语言都能些操作系统系统,你Shell能吗?每次这个时候,小王就傻笑着对我摇摇头说: 说不过你,看你上次写过什么网卡什么的ping程序,这不,我电脑不能上网了,你用C写个程序ping一下子,我看看。我说那好办(心里想,我上次才写的博客,才分析的linux内核网络协议,这不是小case)原创 2012-05-28 10:45:24 · 556 阅读 · 0 评论 -
C语言中的位运算在嵌入式中的应用
在嵌入式系统编程中,位运算比其他运算更常用。这正是由于在嵌入式系统中涉及到更多有关硬件寄存器的操作,硬件寄存器由若干位组成,这些位可能具有读写,只读,只写等几种属性。在C语言中,可以通过8位,16位,32位的指针进行相应的数据操作,因此整字节数据的读写还是比较直观的。然而,C语言中没有专门的对指定位操作的语法,在进行位操作的时候,需要对指令进行简单的组合来完成功能。1)字节操作在嵌入式系统原创 2012-05-28 18:13:02 · 1097 阅读 · 0 评论 -
C语言程序的内存布局
我们做C语言中这么多年,都知道这样一句话,C语言代码形成可执行程序,需要经过编译->汇编->链接三个阶段。背都背熟了,但是到底啥意思,每一步都会产生一些什么东西,很多人都不是太了解。今天就详细的来说说这个问题: 先看下图,在这个图中,我详细的描述了,整个过程及中间的一些步骤: 代码段,只读数据段,读写数据段,未初始化数据段属于静态区域。栈原创 2012-05-28 13:47:39 · 557 阅读 · 0 评论 -
大小端,内对齐及函数跳转在嵌入式中的应用
1)大小端的问题(只是针对多字节,对于单字节,是不存在大小端问题的): 我们将一个4字节的数据0x7654321放入内存,然后将其读出也是0x7654321,在这个过程中一般是不会出问题的,这是因为对于一种处理器,如果读写指令针对的数据长度和类型是一致的,无论数据在内存中存放的形式如何,处理器整体读写都没有问题。问题在于,将0x7654321整体写入内存,然后在内存的首地址用单字节读取的命原创 2012-05-28 12:47:17 · 1336 阅读 · 0 评论 -
C语言程序的内存布局
一:C语言程序的存储区域 C语言编写的程序经过编绎-链接后,将形成一个统一的文件,它由几个部分组成,在程序运行时又会产生几个其他部分,各个部分代表了不同的存储区域: 1.代码段(Code or Text): 代码段由程序中的机器码组成。在C语言中,程序语句进行编译后,形成机器代码。在执行程序的过程中,CPU的程序计数器指向代码段的每一条代码,并由处理器依次运行。转载 2012-05-27 09:31:16 · 352 阅读 · 0 评论 -
C与C++混合编程
这年头啊,面向对象简直漫天飞,连C语言都有面向对象版--C++。当然啦,这也不能怪谁,面向对象的思想还是比较接近自然思维习惯的,随着编程规模及逻辑思维要求不断提高的今天,还真是需要面向对象的想法。 可问题来了,不少我们这样的工程师(还是有点实力的),习惯了C,对C++呢,也有那么一点感冒,所以啊,有时还真是需要将已有的C语言代码模块与C++语言代码模块相互链接,最快的办法就是将C原创 2012-05-27 09:25:29 · 319 阅读 · 0 评论 -
C语言中程序调试和宏使用技巧
1)打印文件,函数和程序行 在linux使用GCC编译程序的时候,gcc在编译的过程中,会生成一些宏,可以使用这些宏分别打印当前源文件的信息。主要有当前文件(__FILE__,为字符串型char *),当前运行的函数(__FUNCTION__,为字符串型char *)和当前的程序行(__LINE__,为整型int)。使用实例如下:printf("file:%s func原创 2012-05-27 12:28:28 · 561 阅读 · 0 评论 -
C/C++中宏和内敛函数(inline)的区别
最近,老是有人问我,有关内敛函数和宏的区别,说了一遍又一遍,不想说了,写出来,想知道,看博客吧:C/C++中如果函数前面加关键字 inline ,那么表示该函数是内敛函数,如下所示: inline int Fun(int x) { return ((x > 5) && (x < 10)) ? x : 0; } 从样子来说,内敛函数的功能和宏定义(#define )差不多,即在原创 2012-04-29 08:23:52 · 687 阅读 · 0 评论 -
C语言中动态内存的堆和栈
一直有人抱怨动态内存的堆和栈到底有啥区别,具体到数据的存放,到底哪些放在堆里,哪些放在栈中,还是放到了别的什么地方,针对,大家不断问到的问题,我也收集了一些资料,来和大家讨论一下。 在C语言程序运行的过程中,需要内存来存放数据。这里说的内存主要分为两类:静态的存储区和动态的存储区,如下图所示: 其中,静态数据存储区分为三类:只读原创 2012-04-29 08:30:14 · 1214 阅读 · 1 评论