![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c语言
文章平均质量分 87
baidu20008
这个作者很懒,什么都没留下…
展开
-
实现地址对齐的内存分配函数
要求:实现一个地址对齐的内存分配函数解题思想:对于要分配bytes字节的内存,要求地址对齐到alignedment。将内存分配空间增大alignedment,为后续对齐预留空间。然后进行地址对齐,将分配内存的真正地址,存放在对齐后的地址的前一个point位置处。注意边界情况的考虑。当然还有一种实现方式就是在对齐指针的前一个int处存放真正地址到对齐地址的距离,在aligned_free时再讲真原创 2013-10-24 21:55:14 · 2434 阅读 · 0 评论 -
为什么宏定义总是要使用do-while语句呢?
在阅读linux内核代码的过程中,经常会发现宏定义中使用了do-while语句。有时候觉得这种do-while语句显得有点多余?干嘛非得使用它把函数块包裹起来?像下面的#define MARCO_FUN1() do{\ Function();原创 2014-06-30 23:13:49 · 2993 阅读 · 2 评论 -
MyString的实现
这里简单实现一个原创 2014-05-14 16:04:24 · 893 阅读 · 0 评论 -
找出1-100中缺失的两个数
题目:有一个数组 int array[100];本来应该存放的数为1~100,但是有两个数据a,b丢失了,值变成了0。问如何找出丢失的那两个数?附带条件不能开辟额外的空间。解题思路:常见的两种解法有:1.计算a+b和a*b的值,然后在解方程求解(但是这样会使得中间某个变量过大)。2.使用bit位来标记。占用13个字节。第二种方法使用了额外空间,第一种可能会造成整型溢出。这里考虑转化为熟悉的方法原创 2014-03-25 20:50:22 · 7097 阅读 · 0 评论 -
openlldp-0.4alpha实现详解(七)——lldp_main,lldpneighbors模块
lldp_main.c模块调用之前的各个模块的接口,实现lldp功能。使用select进行套接字的复用,每个一秒运行一次端口发送和接收状态机。#ifdef BUILD_SERVICE// We are building as a service, so this should be our ServiceMain()int ServiceMain(int argc, char *arg原创 2014-02-24 11:10:47 · 3451 阅读 · 1 评论 -
openlldp-0.4alpha实现详解(六)——lldp_tlv、lldp_tlv_common、msap、lldp_neighbor模块
lldp_tlv主要是用来创建各种lldp报文所需的tlv,并提供验证。而lldp_tlv_common模块则是对于标准tlv进行修整。之前我们知道,lldp的tlv的type只有7个bit位,而length则有9个bit位,这样的结构对于程序的使用是十分不便的,故此进行转化。将7个bit位的type,转化为uint8_t。9bit的length转为为uint16_t的。 msa原创 2014-02-24 11:07:01 · 2511 阅读 · 1 评论 -
链接器符号解析算法小解以及静态库链接顺序等等问题
在编写linux驱动程序时,时常会发现链接出错,当时往往不知道错误在哪。现在了解到链接器的工作原理之后,明白当时为什么出错了。对于以后有效率地编写驱动程序有很大帮助。 一个C语言程序,经过诸如GCC之类的编译器编译成可执行文件一般会经历4个处理过程,这个大部分的linux入门书籍都有讲到过,如果没有扔掉它,:)! 分别经过C预处理器(CPP)、C编译器(CL原创 2013-09-09 09:09:23 · 2023 阅读 · 0 评论 -
linux C内存泄露检测实现及内存泄露检测的一般方法
linux中,由于使用malloc或alloc而没有free掉申请的内存,就会造成内存的泄露。通常,来讲为了避免内存泄露的情况出现,一般要求,我们尽量的malloc之后,调用free。但是总会有忘记free的时候啊。 可以有如下几种方式来避免内存泄露:1) 使用智能指针,这个在C++中较为常见;2) 使用内存池3) 自己封装一层malloc/free等等。当申原创 2013-09-10 22:21:25 · 1501 阅读 · 0 评论 -
不使用itoa或sprintf等系统函数完成整型向字符串的转换
题目:问在不使用itoa或sprintf等系统函数的情况下,如何实现整型向字符串的转换?解题思路:思路相对简单。首先判断正负,若为负数则记录‘-’号。然后从低位逐个向高位进行转化。但这一方法的确定就是在转换完之后要颠倒除了符号之外的字符串。另外一种方法是直接在进行转换的时候,字符串颠倒记录。但这样也有缺点,会造成轻微的内存泄露。使用全局变量能够解决这一缺陷。先使用unsigned int来原创 2013-11-26 20:25:21 · 1513 阅读 · 0 评论 -
不使用加号,完成整数的相加
题目:要求不使用基本四则运算的加法即不能使用‘+’,完成两个整数的相加解题思路:在不能使用加法的情况下,想办法模拟出加法操作的步骤,从而完成整数相加操作。两个数a和b相加,其结果可以分离为进位和不进位的结构相加。只要能够计算出进位结果和没进位的结果,然后递归调用相加就能够达到题目要求。c语言中的位操作中,a&b可以取出两方都是1的位,这实际上就是进位。而a^b则能够取出一方为一,一方为原创 2013-10-30 20:22:26 · 2493 阅读 · 0 评论 -
这里实现一个基于数组的线程安全的循环队列
具体代码如下:#include#includeusing namespace std;#define QUEUESIZE 128templateclass ThreadSafeQueue{private: pthread_mutex_t m_lock; int m_front; int m_rear; object m_data[QUEUESIZE];public:原创 2014-07-30 23:32:13 · 2488 阅读 · 3 评论