摘要: 地址格式: 函数bind和getsockname使用通用数据类型:struct sockaddr*来指向socket地址。 sa_family 指的是地址格式, sa_data[14] 则是真正的地址内容。地址数据和格式挂钩的,什么样的格式对应什么样的内容。长度也依赖于格式,所以有可能大于14个字节 阅读全文
posted @ 2016-08-08 22:48 三复苏 阅读(1715) 评论(0) 推荐(0) 编辑
摘要: socket套接字和管道同样可以提供进程内通信。但套接字更胜一筹,不同的进程可以跨越不同的主机(说白了,支持网络通信)。使用套接字的知名程序:telnet、rlogin、ftp等。 你需要知道的一些基本原理: 使用socket时必须指定通信的类型和协议。 通信类型决定了以下内容:1、数据传输的基本单 阅读全文
posted @ 2016-08-08 18:21 三复苏 阅读(1737) 评论(0) 推荐(0) 编辑
摘要: 规则格式: target: 中文为目标,一般指目标文件名。即你编译产生的目标文件。 prerequisite:依赖,目标文件的依赖文件。make根据prerequisite的时间戳来判断target是否需要更新。 recipe:中文指烹饪方法。这里指的是使用prerequisite生成target的 阅读全文
posted @ 2016-08-08 15:36 三复苏 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 单一进程使用管道基本上毫无意义。管道一般用来子进程和父进程之间的通信,或者兄弟进程间的通信。 创建管道的主要函数是pipe pipe函数创建一个管道,为管道的两端设置文件描述符。我们通过文件描述符进行读写。写入端的文件描述符存放在filedes[0]中,读出端则在filedes[1]中。(在linu 阅读全文
posted @ 2016-08-07 15:14 三复苏 阅读(583) 评论(0) 推荐(0) 编辑
摘要: 虚拟内存按页划分,我们可以明确告诉系统:某一个虚拟内存页需要和实际内存帧相关联。这样一来,该内存页就被换进来了,而且不会被系统换出去。这一行为叫做锁页(locking a page)。 一般来讲页的换进换出是透明的,一般程序接触不到这一层。但是呢,锁页可以为我们带来如下好处: 1、速度:如果你的程序 阅读全文
posted @ 2016-08-05 23:22 三复苏 阅读(424) 评论(0) 推荐(0) 编辑
摘要: 看到半动态申请内存,第一反应这是什么鬼? 实际上半动态内存申请很容易理解,在GNU C中使用alloca函数来实现 alloca函数可以像malloc一样动态申请内存(注意所申请的内存位置在调用函数的栈里面,页因此在调用函数结束后自动释放) 好处是显而易见的:既可以自由得申请空间,又不需要手动释放内 阅读全文
posted @ 2016-08-05 15:59 三复苏 阅读(257) 评论(0) 推荐(0) 编辑
摘要: linux中Obstack内存管理方式介绍 阅读全文
posted @ 2016-08-05 05:04 三复苏 阅读(1970) 评论(0) 推荐(1) 编辑
摘要: C里面没有垃圾回收机制,有时候你申请了动态内存却忘记释放,这就尴尬了(你的程序扮演了强盗角色,有借有还才是好孩子)。当你想找出内存泄露的地方时,有的投入海量的代码中,头痛不已。还好GNU C库提供了些简单的方法。 mtrace和muntrace两个函数可以帮助我们追踪动态内存使用情况。前提是我们设置 阅读全文
posted @ 2016-08-04 19:21 三复苏 阅读(1994) 评论(0) 推荐(0) 编辑
摘要: C语言有两种内存申请方式: 1、静态申请:当你声明全局或静态变量的时候,会用到静态申请内存。静态申请的内存有固定的空间大小。空间只在程序开始的时候申请一次,并且不再释放(除非程序结束)。 2、自动申请:当你声明自动变量的时候会使用自动申请。函数参数、局部变量都属于自动变量。这些变量空间在程序执行致相 阅读全文
posted @ 2016-08-04 14:50 三复苏 阅读(1688) 评论(0) 推荐(2) 编辑
摘要: 程序员接触的内存空间和系统接触的物理内存空间是有所区别的。对于一般进程来讲,他面对的是一个线性虚拟内存空间:地址从0到最大值。每一个进程面对的虚拟内存空间都是一样的,都享有全部的内存地址。虚拟内存空间是线性的,但并不意味着是连续的。部分地址段的虚拟空间可以是缺失的(不是所有地址都可以用来存储数据)。 阅读全文
posted @ 2016-08-03 14:37 三复苏 阅读(596) 评论(0) 推荐(0) 编辑