随笔分类 - c++
摘要:最近在用socket时,再次思考了一下如何确保对方收到消息的问题 下面是一些不错的回答 https://www.zhihu.com/question/25016042/answer/73785738 其实我已经说得很清楚了,其实就相当于文件传输的断点续传。你没有必要每次send成功后,去等待服务端发
阅读全文
摘要:想到一个socket在多线程模式下,是否可以同时使用的问题,比如socket A阻塞在recv,而别的线程用socket A send是否能成功,下面上实验代码 经过实验发现,socket A阻塞在recv,而别的线程用socket A send是可以成功的。 还有个发现,当一个socket被多出r
阅读全文
摘要:设置方法 int nNetTimeout=10000;//10秒, //设置发送超时 setsockopt(m_socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&nNetTimeout,sizeof(int)); //设置接收超时 setsockopt(m_socket,
阅读全文
摘要:众所周知,vector是连续存储空间,只提供高效的尾部删除方法pop_back() ,在中间删除的效率很低,那么如果大家想快速删除中间元素该如何实现? 话不多说,看代码: 我们的思路是: 如果想删除第二个元素,那么我们只需要将第二个元素填充为末尾元素,此刻就相当于把第二个元素删除了,但是此时尾部元素
阅读全文
摘要:看muduo库某个生产者消费者的地方,利用shared_ptr有效减少了锁的范围及无用的拷贝,下面来看一看 1) 当reader要获取_data时,shred_ptr引用计数+12) 当writer要写_data时,判断是否当前线程是_data的唯一拥有者,如果不是,那么拷贝一份_data,更新新的
阅读全文
摘要:nginx中,将地址的最后一位取出来,用Instace变量标识,用来判断是否连接已经被释放成为过期时间 为什么指针地址最后一位一定是0呢? 这里的内存地址,一定是内存分配器分配出来的地址,如new 。最后一位不是0的当然也可以是有效的指针,但是那肯定不是new出来的 而所有的内存分配器在所有架构下分
阅读全文
摘要:在练习内存池时,发现需要重载new,可是这个重载只是重载了operator new,那么还有哪几种new呢,下面来记录一下 首先记录一个点,在类中重载operator new,默认就是静态成员函数,所以不能生命为虚函数,不能调用非静态成员变量 下面正文,c++有三种new 说的通俗点。1、new运算
阅读全文
摘要:Linux kernel里面从来就不缺少简洁,优雅和高效的代码 比如,通过限定写入的数据不能溢出和内存屏障实现在单线程写单线程读的情况下不使用锁。因为锁是使用在共享资源可能存在冲突的情况下。还用设置buffer缓冲区的大小为2的幂次方,以简化求模运算,这样求模运算就演变为 (fifo->in & (
阅读全文
摘要:看nginx代码时发现双链表使用的是这种方法,记录一下 给出一个实例来说明 struct father_t { int a; char *b; double c;}f;char *ptr = &(f.b);//而不是 ptr = f.b; 这里ptr是b的地址,而不是它指向的地址。 struct f
阅读全文
摘要:首先,递归锁是什么 首先,对于互斥锁,分为递归锁和非递归锁。 在不同的线程中调用已锁定的互斥锁,必然会导致死锁。 但是在同一个线程中,如果想要多次获得一个锁,只能使用递归锁 其次,递归锁是不被提倡的,用到递归锁说明这个代码设计是有问题的。 更好的做法是,提取出一个被两个个公有函数调用的私有函数,这个私有函数无需锁定mutex 尽量使用非递归锁,在程序逻辑有问题时,产生死锁暴露出问...
阅读全文
摘要:首先贴另外一个地址https://blog.csdn.net/kikikind/article/details/2645316 一、理论上case 当一个纯虚函数被调用到时,vc++的debug模式下会弹出这么一个对话框: 这里没拷贝到。 然后就是crash了。 在网上找了一下,发现已经有人对此作了
阅读全文
摘要:微博上看到有人在讨论尾递归,想起以前曾看过老赵写的一篇相关的博客,介绍的比较详细了,相信很多人都看过,我也在下面留了言,但挑了个刺,表示文章在关键点上一带而过了,老赵自然是懂的,但看的人如果不深入思考,未必真正的明白,下面我说说我的理解。 什么是尾递归 什么是尾递归呢?(tail recursion
阅读全文
摘要:之前写服务端程序有一个往消息队列里面推json的过程,然后发现推进去C#端取到的无论如何都是个空指针 简单复现一下现场 这样看起来输出是ello1ello2的输出,在我笔记本上面挺正常的,实际上我集成到服务器上面的时侯炸了,一直取到一组奇怪的字符串 跟踪调试了一早上(虽然写了3年C++工程,但是还是
阅读全文
摘要:内存泄露:分配了内存而没有释放,逐渐耗尽内存资源,导致系统崩溃内存越界: 打个比方 就是你有一个500ml的水瓶,然后你倒在瓶里的水大于500ml 那个多余的就会流出来... 1. 原理分析经常有些新C++程序员问:C++的类的成员个数是不是有限制,为什么我加一个变量后程序就死了?或者说:是不是成员
阅读全文
摘要:这是蘑菇街开发的内部通讯软件,记录一下。可以参考学习 https://github.com/meili/TeamTalk
阅读全文
摘要:值得学习的C语言开源项目 -1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁
阅读全文
摘要:今天错误的使用了swap 如以上代码,本意是想改变map_test[1]所对应的值为20 可是这样使用后 是把tmp_vice1指向了原先tmp_20所管理的内存,tmp_20指向了 tmp_1管理的内存 而不是内存的相互交换! 正确使用直接用map_test[1] 和tmp_20 swap即可
阅读全文
摘要:1.Linux下文本浏览器lynx 文本浏览器,顾名思义就是只有文本的浏览器,这个浏览器可以在命令行下打开使用 2.CURL 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url
阅读全文
摘要:异步读可以使用async_read_some或者async_read等
阅读全文
摘要:在网络传输中,很多数据都是按字节传递而不是字符串。最近就遇到了这个问题,在刚开始学c语言时都没有问题,可能太久不用了,记录一下 在报中文,用2个字节hex码来表示报文正文长度,什么是hex码呢 就是16进制数 char c = ‘\b’; 那么c的整数类型就是8(ascii 8对应\b) char类
阅读全文

浙公网安备 33010602011771号