基础
文章平均质量分 59
Learning_zhang
这个作者很懒,什么都没留下…
展开
-
零拷贝
Nginx配置中又一个sendfile配置,sendfile是零拷贝的一个方法。1、零拷贝的原理是什么1)DMA传送方式 CPU与外设之间的数据传送方式中断传送方式、DMA传送a、中断传送方式 中断传送方式是指当外设需要与CPU进行信息交换时,由外设向CPU发出请求信号,使CPU暂停正在执行的程序,转而去执行数据输入/输出操作,待数据传送结束后,C...原创 2020-01-06 21:02:55 · 200 阅读 · 0 评论 -
C编程的细节(1)
变量的生命周期问题。在一个程序中,操作系统为程序存储不同数据而划分出不同的区块,栈,堆,数据段,代码段等。局部变量存储在栈中,依靠栈针的上下移动来控制变量的生存,而这些变量的生存都是由操作系统进行管理的,所以在其变量定义中的类型生命前有一个默认的anto自动管理。栈的大小接近1M。原创 2016-08-27 21:44:39 · 536 阅读 · 0 评论 -
C编程细节(4)
1.短路径法则。&&操作,如果右边的结果为假则直接得出结果为假。||操作,如果右边结果为真则直接得出结果为真。此过程提升了效率,但是若是在右边出现赋值操作,则可能会跳过此表达式,所以应去避免。2.表达式的运算顺序与操作符的优先级、结合性以及操作符是否控制执行顺序有关。运算符的优先级从高到底:单目,算术,移位,关系,逻辑,三目,复合赋值,逗号。几类中,其内部也有不同的优先级别。3.一些变量的原创 2016-09-27 15:57:33 · 363 阅读 · 0 评论 -
C编程的细节(3)
1.函数的传参是从左到右传的,如printf均是从左到右接收值的,所以其中包含的一些值得修改的表达式的位置就很有必要了。例: int i=0; printf("%d ,%d",i,++i);其打印的值为:1 ,1。2.数组的标识符是不能进行自增自减运算的,即使表示地址的指针可以和整型数值相加减,因为其不是作为左值使用的。例如数组:int arr[10];其表示地址的指针的类型是(int原创 2016-09-19 23:23:19 · 511 阅读 · 0 评论 -
存储器的分类与寻址
思考: 每个存储单元都有自己的门牌号,在将信息放入空间的时候,需要地址线给出地址寻找到该空间然后再将数字放入该地址,而在引用它的地方将此地址记录到该处。现在的问题是,机器给出一个地址后,是如何依照这个地址找到该空间的。想到数电中的存储空间所化的方格电路图,几根导线不同电平电流导过去就对应着唯一的空间? 答 :一、内存:在现在通用的标准中,所认定的都是以8位为一个字节,以字节为单原创 2016-09-27 15:44:03 · 1790 阅读 · 0 评论 -
宏定义详解
1>宏函数替换之后,代码量可能会有所增加,其运行速度有所提高,而使用普通函数需要进行现场保护,现场恢复的操作,其代码在内存中只出现一次。2>使用宏函数可能因为直接替换而导致运算的优先级发生改变,产生难以发觉的错误。3>使用宏函数没有类型检查,适应于各种类型,即是缺点亦是优点,不安全。函数参数如果类型不同,就需要使用不同的函数,有严格的类型检查机制。 4>使用宏函数可能会导致副作用,参数每次调用宏定义时,它们都将重新求值。由于多次求值,具有副作用的参数会带来隐蔽的错误,而函数在调用之前只求值一次,多次原创 2016-09-27 16:05:27 · 982 阅读 · 0 评论 -
GIt命令
Git init初始当前目录为git可以管理的仓库Git add filename 添加至仓库Git commit –m “tag of this commit”Git status 查看状态Git diff filename 查看具体修改的内容Git log 查看提交日志 ----------gitreflogGit reset –hard commit_id 回退到上原创 2017-02-24 20:36:03 · 264 阅读 · 0 评论 -
malloc内存管理
alloc一次批发一大段的地址空间,然后对其进行管理。类似操作系统发展之中为进程管理内存使用的算法:首次适应算法,最佳算法,下次适应(NF)算法,还有如伙伴系统,哈希算法等等。将堆看成一大数组,对数组内存进行管理。申请内存就是从中获得某子数组空间。管理内存方法的好坏优劣如:1>来回的的申请释放产生尽可能少的外部碎片,使得来的任务需要较大的内存能得到分配 2>申请释放时候的效率,分配时候的效率,合并内存的效率。3>较少的使用辅助的内存,提高利用率。管理内存使用的有显示链表和隐式链表,隐式链表是在数组内部通过原创 2017-04-16 22:30:28 · 538 阅读 · 0 评论 -
动态开辟内存总结
注意事项:1.不要访问已经被free函数释放了的内存(可以在释放内存后,将此指针赋值为NULL)。 2.对NULL指针进行解引用操作,对分配的内存进行操作是越界,释放并非动态开辟的内存,释放一块动态分配的内存的一部分(对返回指针操作时进行了赋值,使其位置偏移),对一块动态内存释放之后被继续使用。 3.free的参数要么是NULL,要么是调用alloc返回的值,向free传递一个NULL参数不起任何作用。 4.当动态开辟的内存使用完毕后,及时释放,使原创 2016-08-31 21:28:19 · 1176 阅读 · 0 评论 -
C代码编译
C语言的翻译分为编译,链接过程,编译过程又分为预处理,解析,汇编。现在的编程软件都提供了很方便的翻译环境,将翻译链接综合在一块,只通过简单的几个按键就能运行程序。将这个翻译过程理解,有助我们更深的了解计算机的运行机制,更好的运用其不同特性完成不同功能。C代码写好后,第一道工序是预处理。预处理是由预处理器解释的,预处理器读入源代码,根据预处理指令对其进行修改,然后将修改过的源代码交给编译器。原创 2016-08-27 21:29:09 · 547 阅读 · 0 评论 -
指针
将指针和普通变量当成形参的区别,指针存储的是原数据的地址,通过对指针进行解引用来访问原数据,如果直接对指针变量里的值进行修改,则其所指向的就不是原来的存储单元,但要注意该指针的类型。形参是普通变量,则是对原来数据的一份拷贝,通过计算返回结果或者是一个运行的过程。二级指针,里面存储的是一级指针,一级指针里面存储的也是地址,二级指针里面存储的是一级指针的地址,通过对二级指针一次解引用可以操作一级指针变量里面存在的值,通过对二级指针的二次解引用,可以操作的不再是地址,而是一个具体的整型或者其它可以直接使用的数值原创 2016-10-06 18:33:18 · 310 阅读 · 0 评论 -
函数的声明、定义与函数的编译、链接
语言可以分为编译型语言和解释型语言,对于编译型语言,一次编译,源程序不改变则无需再进行编译。解释型语言是在运行时解释一条执行一条,如此反复直至完成。编译型语言编写程序之后需进行几个必不可少的步骤:预处理、编译、链接,三个各有各的作用,有时三个可以放在一起方便编写调试,但有的情况下需要根据其作用发挥其各自的功能。 进行函数声明之后,在程序中使用该函数,若未定义,编译该程序,会发现,程序的原创 2016-08-30 22:11:50 · 1487 阅读 · 0 评论 -
C语言的浮点型数值
浮点型的存储因指数位的不同,分为规格化的,非规格化的和无穷大,非数四种情况组成。 a.规格化的:exp!=0 && exp !=255,即指数位不全为零,也不全为1时的情况。此时存储的指数位是加上偏移127。其位数二进制表示为0 <= frac < 1,其位数实际为M = frac + 1; b.非规格化的:exp = 0,存储的指数位是E = 1 - 127,其位数位为M = frac,不再包含隐含的开头1。c.无穷大:exp = 255,frac = 0,当sign = 0时是正无穷,当sig原创 2016-08-30 22:20:20 · 2605 阅读 · 0 评论 -
函数返回值与栈
函数的局部变量定义在栈中,栈的特点后进先出(LIFO)。局部变量所在的栈的高地址在下,低地址在上。从main开始,申请变量时栈顶指针向上移动,进入局部变量,局部变量的申请同在main函数中一样,一旦子函数执行完毕,则栈顶指针下移到进入局部变量时的位置,子函数所申请的局部变量空间都被回收。所以如果函数需要子函数中的一些值时,可以通过返回该数据来获得(用指针间接访问变量无需返回)。原创 2016-08-31 21:25:33 · 8330 阅读 · 1 评论 -
C编程的细节(2)
浮点数由指数位不同而划分的几种不同存储和解释方式:规格化的,非规格化的的,特殊值。规格化浮点数的存储与解释。浮点数运算中,大多机器采用的是向偶数摄入法,也称之为向最接近的值舍入。用加法,减法,和乘法的组合来消除很多整数乘以常数的情况,例如y*14,利用等式14=2^3+2^2+2^1,编译器会将乘法重写为(y<<3) + (y<<2) + (y<<1)。或者利用14=2^4-2^1,将等式重写为(y<<4) - (y<<1)。原创 2016-08-31 21:36:47 · 450 阅读 · 0 评论 -
switch语句
case语句的数目及case后的整型数据之间的跨度使得对其进行优化的方案不同。case语句的整型数值跨度大难已形成跳转表。case语句中的整型如果跨度不大于六且四分之以上的,形成跳转表。原创 2016-09-09 12:39:43 · 1065 阅读 · 0 评论 -
学完数字电子电路基础后对计算机的理解
第一章 数制与码制介绍了几种常见的数制,二进制、八进制、十六进制,这些进制中的二进制和十六进制在计算机应用多。ASCII码是一组七位的二进制代码,共128个,代表着数字、大小字母、32个符号和34个控制码,每个控制码都有其特定的含义。ASCII码用于数据的存储,字符编码等。十六进制常见于地址中。介绍了数制之间的转换,了解分析计算机处理数据的过程。二进制的原码、反码、补码,是数据在原创 2016-08-27 21:23:36 · 1234 阅读 · 0 评论