排序:
默认
按更新时间
按访问量

C函数的调用过程原理和栈分析

  在编程中,相信每个人对函数都不陌生,那么你真正理解函数的调用过程吗?当一个c函数被调用时,一个栈帧(stack frame)是如何被建立,又如何被消除的。本文主要就是来解决这些问题的,不同的操作系统和编译器可能有所不同,本文主要介绍在linux下的gcc编译器。 栈帧   我们先来看一...

2018-07-13 12:01:57

阅读数:178

评论数:0

深度剖析c语言main函数---main函数的执行顺序

  在之前的文章中,介绍了main函数的返回值 和 main函数的传参,本文主要介绍一下main函数的执行顺序。可能有的人会说,这还用说,main函数肯定是程序执行的第一个函数。那么,事实果然如此吗?相信在看了本文之后,会有不一样的认识。 为什么说main()是程序的入口   linux系...

2018-07-10 14:09:37

阅读数:205

评论数:0

深度剖析c语言main函数---main函数的参数传递

  在上文中,我们主要讲了c语言main函数的返回值问题,本文主要将main函数的参数传递。 main函数传参   首先说明的是,可能有些人认为main函数是不可传入参数的,但是实际上这是错误的。main函数可以从命令行获取参数,从而提高代码的复用性。 函数原形   为main函数传参时,...

2018-07-10 00:20:38

阅读数:184

评论数:0

深度剖析c语言main函数---main函数的返回值

  在接下来的几篇博文中,我将对c语言的main函数进行深入的剖析,分别从函数返回值,函数参数,以及函数的执行顺序对main函数作一总结。本文主要聊聊main函数的返回值。 main函数的返回值   main函数的返回值用于说明程序的退出状态。如果返回0,则代表程序正常退出。返回其它数字的含义...

2018-07-09 23:19:06

阅读数:198

评论数:0

网络编程的三个重要信号(SIGHUP ,SIGPIPE,SIGURG)

  对于信号的介绍,我再前面的一篇博客中做过专门的总结,感兴趣的可以看看。本文主要介绍在网络编程中几个密切相关的函数:SIGUP,SIGPIPE,SIGURG。 SIGHUP信号   在介绍SIGHUP信号之前,先来了解两个概念:进程组和会话。 进程组   进程组就是一系列相互关联的进...

2018-07-07 16:25:19

阅读数:172

评论数:0

两种高效的并发模式

前言   我们都知道,并发编程的目的是让程序“同时”执行多个任务,提高效率。当一个程序是计算密集型的时,并发编程并没有优势,反而由于任务的切换时效率降低。但是,当一个程序是IO密集型时,采用并发编程会极大地提高cpu的利用率。因为IO操作的速度远远小于cpu的计算速度,所以让程序阻塞与IO操作上...

2018-07-06 18:38:58

阅读数:384

评论数:0

Linux网络编程--两种高效的事件处理模式

前言   今天,我们主要介绍一下网络设计模式中的两种事件处理模式,Reactor和Proactor模式。通常使用同步I/O模型(select,poll,epoll等)用来实现Reactor模式,而异步(aio_read或aio_write等)用来实现Proactor模式,不过还可以使用同步来模拟...

2018-07-04 18:14:52

阅读数:459

评论数:0

IO复用的总结及一些问题

  在前面的文章中,分别介绍了常用的三种实现IO多路复用的函数:select、poll、epoll今天对主要是对这三个函数的总结,以及对一些io复用的问题的总结。 总结 系统调用 select poll epoll 事件集合 用户通过3个参数(reads...

2018-07-04 12:33:18

阅读数:478

评论数:0

IO复用(epoll)

  在前面的文章中讲了实现IO复用的两种方式:select和poll。今天主要讲一个更为高效的函数epoll。 epoll   epoll能显著提高在大量链接中,只有少量活跃连接时的cpu利用率。因为,首先epoll可以复用监听的文件描述符集合,而不用每次在等待事件之前重新准备被监听的文件...

2018-07-03 23:47:03

阅读数:438

评论数:0

I/O复用(poll)

  上文说到的实现IO复用的函数中的select,本文接着介绍第二种poll。 poll   Poll相对于select来说突破了监听的文件描述符上限1024,最大文件描述符是系统所能允许的最大值,可以通过查看proc/sys/fs/file-max文件查看,这个值也可以改(通过limits....

2018-07-02 21:27:05

阅读数:526

评论数:0

I/O多路复用(select)

  在之前写过一篇五种I/O模型,感兴趣的可以去看一下,今天主要讲其中的一种,那就是I/O多路复用。因为I/O多路复用可以使一个进程同时处理多个连接。这对提高程序的性能至关重要。对于IO复用的概念与理解在上文说的挺清楚了。本文主要说实现IO复用的系统调用。   在linux下,实现IO复用的系统...

2018-07-02 21:18:47

阅读数:553

评论数:0

linux五种IO模型

  为了更好的理解五种IO模型,我们先来说一下几个概念:同步,异步,阻塞和非阻塞。 同步和异步   这两个概念与消息的通知机制有关。 同步   所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。比如,调用readfrom系统调用时,必须等待IO操作完成才返回。...

2018-07-01 12:43:36

阅读数:555

评论数:0

详解二叉树的非递归遍历

本文转载自:http://blog.csdn.net/zhangxiangdavaid/article/details/37115355 前言   对于二叉树的递归遍历比较简单,所以本文主要讨论的是非递归版。其中,中序遍历的非递归写法最简单,后序遍历最难。 节点的定义: //Binar...

2018-06-29 11:18:20

阅读数:74

评论数:0

浅析dup()和dup2()函数

前言   在linux下,一切皆文件。当文件被打开时,会返回文件描述符用于操作该文件,从shell中运行一个进程,默认会有3个文件描述符存在(0、1、2);)0表示标准输入,1表示标准输出,2表示标准错误。一个进程当前有哪些打开的文件描述符可以通过/proc/进程ID/fd目录查看。   今天...

2018-06-29 09:05:24

阅读数:609

评论数:0

frok 与 vfork

一、首先看一个程序: #include <stdio.h> #include <sys/wait.h> #include <unistd.h> Int main(...

2018-06-25 19:04:40

阅读数:590

评论数:0

部分重要的SOCKET选项

  首先介绍两个专门用来读取和设置socket文件描述符属性的系统调用 getsockopt() && setsockopt() 函数原形: //读取socket文件描述符的属性 int getsock...

2018-05-28 17:58:05

阅读数:74

评论数:0

malloc的底层实现(ptmalloc)

前言   本文主要介绍了ptmalloc对于内存分配的管理。结合网上的一些文章和个人的理解,对ptmalloc的实现原理做一些总结。 内存布局   介绍ptmalloc之前,我们先了解一下内存布局,以x86的32位系统为例:      从上图可以看到,栈至顶向下扩展,堆至底向上扩展,...

2018-04-15 16:54:44

阅读数:635

评论数:0

简单剖析B树(B-Tree)与B+树

注意:首先需要说明的一点是:B-树就是B树,没有所谓的B减树 引言   我们都知道二叉查找树的查找的时间复杂度是O(log N),其查找效率已经足够高了,那为什么还有B树和B+树的出现呢?难道它两的时间复杂度比二叉查找树还小吗?   答案当然不是,B树和B+树的出现是因为另外一个问题,那就是...

2018-03-25 11:30:09

阅读数:1088

评论数:0

线程控制原语小结

在本篇博客中主要总结一下linux下,线程的一些控制原语。   在Linux环境下,所有线程特点,失败均直接返回错误号。所以我们可以利用strerror()将错误信号所代表的具体错误打印出来。参数为发生错误所返回的错误信号。例如:    ret = pthread_create(&a...

2018-03-20 21:39:53

阅读数:604

评论数:0

线程与进程的简单比较

  本篇文章主要对线程与进程之间的区别作一简单总结,从内核实现的区别,双方的地址空间、共享的数据、操作原语的比较和多线程与多进程的区别这几方面,做一简单说明。 1、Linux内核线程实现原理   Unix系统中,早期是没有“线程”概念的,80年代才引入,借助进程机制实现出了线程的概念。因此在这...

2018-03-20 20:32:03

阅读数:597

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭