摘要:free一个指针,只是将指针指向的内存空间释放掉了,并没有将指针置为NULL,指针仍指向被释放掉的内存的地址,在判断指针是否为NULL的时候,通常是通过if(pt == NULL) ,这时,导致指针成为了野指针 并且野指针和空指针不同,野指针有地址,或者说是指向内存,对野指针进行操作,会造成内存错误
阅读全文
摘要:在linux下c语言结构体对齐: 1.自然对齐 struct 是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float 等)的变量,也可以是一些复合数据类型(如array、struct、union 等)的数据单元。对于结构体,编译器会自动进行成员变量的对齐,以提高运算效率。
阅读全文
摘要:大端小端是一种存储方式,差别在于大端是将高字节的存放在低地址区,低字节存放在高地址区;小端是将高字节存放在高地址区,低字节存放在低地址区。 所以在TCP信息交互的时候,为了不会因为大端小端的因素,将信息的读取产生差异,所以在发送端将主机字节序转换成网络字节序(ntohl,ntohll,ntohs)
阅读全文
摘要:最近遇见很多的关于TCP中封包解包的数据,在TCP节点之间的信息传递,每次传送的内容是结构体,所以每次在传送的时候,要将结构体中的数据进行封包,然后当一端接收到数据之后,要对接收到的buf参数中的数据进行解包。 TCP是数据流的传送,数据之间没有分割,UDP是数据包的传送,数据之间有分割,所以UDP
阅读全文
摘要:内存中栈上的地址是向下增长,堆得地址是向上增长。 运行结果:
阅读全文
摘要:同步和异步的区别: 在网络编程中,同步的意思是,进行收发数据,等到数据真正发送出去或者接受到,才返回;而异步的意思是,可以把数据发送到缓冲区中返回,而发送成功的消息是 通过时间进行通知的。异步可以腾出很多的cpu来处理其他事情,所以异步的方式比较灵活,线程同步是指,多个线程协同完成一件工作,一个线程
阅读全文
摘要:最近想着写几个小demo 写了一个爬虫,用的是C++,基本思想就是一层一层的找类似深搜吧,抓取的页面是www.cnblogs.com,从localhost发送request请求,给www.cnblogs.com,并且根据返回的数据,在中查找用户名,将用户名用map保存,因为有的用户名可能不止一次访问
阅读全文
摘要:转载自:简单,可复制 简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 Unix的grep家族包括g
阅读全文
摘要:网上查的资料小结,没有考证。 真多核是指一个cpu多个核心,即多个内核。 假多核是指多个cpu捆绑形成的分布式计算,ARM针对服务器市场推出的处理器为多个cpu的 真多核的应用奔腾和因特尔 双核芯cpu系统相当于两辆卡车在一条跑道上跑,虽然运送货物的能力提高了,但是也不会频繁产生线程冲突,但是它们是
阅读全文
摘要:内存溢出是指程序在申请内存时,系统并没有给足够的内存来供其使用,OUT OF MEMORY。 内存泄漏是自己向系统申请了内存空间但是使用完之后没有释放掉,结果那块内存自己不能使用,系统也不能在分配给其他程序再使用了。 一次内存泄漏可以忽略,但是多次的内存泄漏终将导致内存溢出。 内存泄漏可以分为4种:
阅读全文
摘要:指针和引用的区别 1、非空区别。在任何情况下都不能使用指向空值的引用。一个引用必须是指向某些对象。因此如果你使用一个变量并让他指向一个对象,但是该变量也可能不指向任何对象,因此这时你应该把该变量声明为指针,因为这时你可以赋空置给该变量。假如变量肯定指向一个对象,并且你的设计不允许变量为空值,这时你就
阅读全文
摘要:Doxygen是一种开源跨平台的,以类似JavaDoc风格描述的文档系统,可以从一套归档源文件开始,生成文档 下载Doxygen + Graphviz Doxygen可以生成动态文档 Graphviz可以生成视图连接将.c文件中所用到的函数、头文件生成一个树状结构并且设置之后可以生成相对应的函数的跳
阅读全文
摘要:转自 hequn8128 在阅读代码量比较多的项目时,类的继承树和函数调用图能够直观地向我们显示类之间或者函数之间的各种关系,方便我们了解程序的整体框架,很多时候可以起到事半功倍的作用。这里尝试了用doxygen+graphviz生成工程中的类继承树和函数调用图的方法,总体来说操作比较方便。网上还有
阅读全文
摘要:转自:jimmy 指针有两个属性:指向变量/对象的地址和长度 但是指针只存储地址,长度则取决于指针的类型 编译器根据指针的类型从指针指向的地址向后寻址 指针类型不同则寻址范围也不同,比如: int*从指定地址向后寻找4字节作为变量的存储单元 double*从指定地址向后寻找8字节作为变量的存储单元
阅读全文
摘要:最近用到的Linux函数,小结。 readlink() 会将参数path的符号链接内容存储到参数buf所指的内存空间,返回的内容不是以\000作字符串结尾,但会将字符串的字符数返回,这使得添加\000变得简单。若参数bufsiz小于符号连接的内容长度,过长的内容会被截断,如果 readlink 第一
阅读全文
摘要:转载自:zxh2075的专栏 在Socket心跳机制中,心跳包可以由服务器发送给客户端,也可以由客户端发送给服务器,不过比较起来,前者开销可能较大。本文实现的是由客户端给服务器发送心跳包,服务器不必返回应答包,而是通过判断客户在线会话记录中的计数标志值来实现心跳异常的检测,以此决定客户端是否已经断开
阅读全文
摘要:考虑下面的场景,server向client发送数据"_META_DATA_\r\n_USER_DATA_",要求"\r\n"之前的数据_META_DATA_在第一次recv中接收,剩下的recv调用读取_USER_DATA_部分的数据。因为tcp是stream协议,并且_META_DATA_数据不是
阅读全文
摘要:data.h server.c client.c
阅读全文
摘要:C10K问题是指服务器同时支持成千上万个客户端的问题,也就是concurrent 10 000 connection(这也是C0K这个名字的由来)。由于硬件成本幅度降低和硬件版本的提高,如果服务器能够解决多客户端的问题,那么也就意味着将降低每一个客户端的成本。 解决IO的策略: 1>用一个线程来同时
阅读全文