摘要: 数组可以想象成一个对象,其中数组名指向对象的首地址,当用sizeof计算数组名时,得到的是数组这个对象占用的内存大小,数组名称的加减和[]操作都不同于一般的指针,而且,数组每一个元素的内存地址是连续的(这里的数组都以二维数组为例,而且说的是静态数组),例如第一行的最后一个元素的和第二行首元素地址是连续的。 函数形参如果是多维数组,二维及以上的大小要给出,例如 int a[][4],因为在函数内部,编译器需要知道a+1要跳多远,只有知道了每一行有多少个元素才行。 把数组名赋值给指针,(不管是赋值给什么样的指针),指针都不会获得数组名所拥有的特性,sizeof作用于指针得到4,虽然指针可以... 阅读全文
posted @ 2013-02-19 23:35 wongzawing 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 需要调试的program必须含有调试信息,编译时加上-g选项启动 gdb 三种方法:(1)gdb <program>调试可执行程序program(2)gdb <program> core同时调试运行程序和core文件,core记录了程序出错时的一些内存环境和出错信息。(3)gdb <program> <PID>attach一个正在运行的程序,调试。break funcbreak 23 在23行设置断点info break 查看断点run (r) 运行next ( n ) 单条语句执行continue (c)继续运行程序print var (p) 阅读全文
posted @ 2013-02-19 23:30 wongzawing 阅读(1101) 评论(0) 推荐(0) 编辑
摘要: IM后台实现的一些思考之前困惑于IM如何维持用户的在线状态,如果用UDP,那么服务器为了得知客户端是否还在线,是否轮询用户列表,对每个用户发包探测?如果这样,客户端没有任何动作,服务器已经忙于维护在线状态而不断占用CPU轮询,不断发包,而且这种情况下如果用户下线,好友还要等到服务器轮询到该用户才知道他下线了,这个延时比较大。反之,如果对每个在线用户维护一个TCP连接,这样用户一下线服务器就立刻知道,但是,用户量这么大,每个用户fork一个进程不现实,而单个进程能打开的文件数目是1024。再说,大量的TCP连接长时间占用系统资源。看了腾讯大讲堂的视频,有些收获,最大的收获是,清楚计算机网络没学好 阅读全文
posted @ 2013-02-19 23:25 wongzawing 阅读(2996) 评论(11) 推荐(2) 编辑
摘要: connect方法会阻塞,请问有什么方法可以避免其长时间阻塞?当在一个非阻塞的TCP套接字上调用connect时,connect将立即返回一个EINPROGRESS错误,不过已经发起的TCP三路握手继续进行。然后用select检测连接是否成功。给select设置超时值,就可以避免长时间阻塞。非阻塞connect有三个用途:(1)在三路握手期间,可以做其他操作。(2)同时建立多个连接。这个用途已随着Web浏览器流行起来。(3)缩短connect的超时,避免长时间阻塞。select+非阻塞connect:两个规则:(1)当连接成功建立时,描述符可写(2)当连接建立遇到错误时,描述符变为既可读又可写 阅读全文
posted @ 2013-02-19 23:16 wongzawing 阅读(396) 评论(0) 推荐(0) 编辑
摘要: 英文原文:http://www.cprogramming.com/tutorial/shared-libraries-linux-gcc.html 库是程序员必须的工具,它是已经编译过的代码。库通常提供通用的功能,例如链表和二叉树等数据结构,或者特定的功能,例如MySQL等数据库服务器访问接口。 多数大型软件项目有多个部件组成,这些部件有可能在其它项目中用到,或者你只是想分离多个部件以便组织。当你有一个可重用或者逻辑上独立的函数集合,建立一个库使你不用总是复制代码到现在的项目然后重新编译,而且可以保持不同的模块的分离,修改其中一个不会影响其他模块。只要一个库被写好且测试过,就可以安全地重... 阅读全文
posted @ 2013-02-19 17:58 wongzawing 阅读(498) 评论(0) 推荐(0) 编辑