C语言
Caly_Meng
科技让生活更美好
展开
-
从单链表操作分析代码质量
本文不单单只是讲单链表的操作,更重要的是通过写一个简单的有序单链表操作,来分析如何写出体积更小,效率高的代码。优化代码,本来就是有能正确解释问题的能力,通常来说,对认识一个问题都有比较深入的了解。否则,只能写出一些额外的代码。 在一个单链表中,每个节点包含指向链表下一个节点的指针,链表最后一个节点的指针值为NULL,表示链表后面不在有其它节点。根据单链表的特点,从链表中,找到第一个节点后,就可以访...原创 2019-01-17 20:41:21 · 209 阅读 · 0 评论 -
从双链表操作继续分析代码质量
双向链表就是两个指针,一个指向前,另一个指向后。因此,我们可以从任何一个节点遍历。 这次也是要实现一个有序双向链表。 思路: 我们把一个节点插入链表时候,有四种情况: 1、 新值可能插在链表中间 2、 新值可能插在链表结束位置 3、 新值可能插在链表开头 4、 新值插入的位置,既是开头就是结束位置。 算法也是比较简单:插入一个值,先拆链后上链。 下面就是代码展示。 //最开始写的代码 int Li...原创 2019-01-17 21:07:20 · 180 阅读 · 0 评论 -
从memcpy源码谈内存操作
去年在做Linux项目过程中阅读别人的代码,发现项目中的内存操作都封装为一个安全拷贝的接口函数。这个所谓的安全拷贝其实就是判断目的地址的内存能否容纳源地址的内容。以前对内存操作处理,只是停留在memmove或memcpy接口的使用上,没有仔细想过自己去实现memcpy该如何做。因此整理了有关内存操作的知识。 先看一段网上别人贴的源代码: void *memcpy(void *dest, con...原创 2019-01-13 23:07:00 · 1254 阅读 · 1 评论 -
arm处理器对非对齐的存储访问操作
在arm处理器中,支持单字节、半字、字的内存存取操作。通常按字单元去访问内存时候,该字单元的首地址要对齐即能被4整除,同理,按半字去访问内存,地址也要对齐。如果存储单元的地址没有遵守地址对齐的操作,则称为非对齐操作。 arm对于非对齐的数据访问操作,系统定义了三种可能的结果: 第一, 执行的结果不可预知。 第二, 忽略字单元的低两位的值。即访问地址&0xfffffffc执行逻辑与操作的结果...原创 2019-01-14 12:17:09 · 3535 阅读 · 0 评论 -
解析内存对齐存取粒度与效率
在学习内存对齐时,看到一篇不错的文章。因此记录下来,以后研究理器的架构设计、缓存的利用等知识,在作补充。 为了速度和正确性,请对齐你的数据. 概述:对于所有直接操作内存的程序员来说,数据对齐都是很重要的问题.数据对齐对你的程序的表现甚至能否正常运行都会产生影响.就像本文章阐述的一样,理解了对齐的本质还能够解释一些处理器的"奇怪的"行为. 内存存取粒度 程序员通常倾向于认为内存就像一个字节数组.在...转载 2019-01-14 12:52:39 · 945 阅读 · 0 评论 -
EOF宏,C语言EOF宏详解
EOF 是 End Of File 的缩写,在 C 语言标准库中的定义如下: #define EOF (-1) 迄今为止,关于 EOF 作用的观点各异。大多数程序员认为“文件中有一个 EOF 字符,用于表示文件的结尾”。但实际上,这个观点并不正确(或者说并不完整),在文件所包含的数据中,并没有什么文件结束符。从 EOF 宏的定义中可以看出,EOF 宏的值为 -1,属于 int 类型的数据,在 ...转载 2019-01-15 19:00:40 · 908 阅读 · 0 评论 -
操作符与表达式易错点总结
1、 赋值操作符 a =x=b+3; 这条语句中,认为a和x被赋予相同的值是错误的。因为当a是char型,x是int型,那么x变量就被截短。 2、 新手容易犯在条件比较本来用==,却写成=,然后编译不会报错。因为这并不是一个语法错误,是一个合法的表达式。 3、 左值和右值 左值就是出现在赋值操作符的左边的东西,右值就是出现在赋值操作符的右边的东西。 能用右值的地方都可以用左值,但是用坐值的地方不能...原创 2019-01-15 20:30:23 · 341 阅读 · 0 评论