c++
文章平均质量分 53
VanceKing
用最专业的心态做最靠谱的事
展开
-
在vector中,怎样删除某个指定值的元素
【在vector中,怎样删除某个指定值的元素】Vectors provide no operation to remove elements directly that have a certain value. You must use an algorithm to do this.一.删除所有满足条件的元素For example, the following statemen转载 2015-04-25 11:41:04 · 11300 阅读 · 0 评论 -
应用 Valgrind 发现 Linux 程序的内存问题
应用 Valgrind 发现 Linux 程序的内存问题如何定位应用程序开发中的内存问题,一直是 inux 应用程序开发中的瓶颈所在。有一款非常优秀的 linux 下开源的内存问题检测工具:valgrind,能够极大的帮助你解决上述问题。掌握 valgrind 的使用以及工作原理,能够有效地定位进而避免应用开发中的内存问题。Valgr转载 2015-08-19 13:55:30 · 434 阅读 · 0 评论 -
vector内存怎么释放
VECTOR的工作原理是系统预先分配一块CAPACITY大小的空间,当插入的数据超过这个空间的时候,这块空间会让某种方式扩展,但是你删除数据的时候,它却不会缩小。vector为了防止大量分配连续内存的开销,保持一块默认的尺寸的内存,clear只是清数据了未清内存,因为vector的capacity容量未变化,系统维护一个的默认值有什么方法可以释放掉vector中占用的全部内存呢原创 2015-08-07 10:43:46 · 2215 阅读 · 0 评论 -
【Linux开发】GCC 4.8及以上支持内存非法访问检查
【Linux开发】GCC 4.8及以上支持内存非法访问检查2015-2-27阅读162 评论0gcc4.8及以上版本支持地址越界,野指针检查,只需要在编译时使用-fsanitize=address选项即可,当运行程序时如果访问非本程序申请的地址就会报错。root@localhost:/home/ngos/practice> vi nullpoint.c 1 #转载 2015-09-07 12:46:29 · 7049 阅读 · 0 评论 -
/usr/bin/ld: cannot find -lmysqlclient_r
编译你的工程代码之前之前,先处理一下mysql的库,默认查找libmysqlclient_r.so,可是mysql默认为libmysqlclient.so,内容完全一样,做个链接即可请在root下执行# cd /usr/local/mysql/lib/mysql/ (库所在目录)# ln -s libmysqlclient.so.15.0.0 libmysqlcli原创 2015-08-22 10:38:20 · 5723 阅读 · 0 评论 -
linux磁盘满了如何清理
首先用root用户,登录 740 cd / 741 ls 742 du -s -s ./* 743 df -h 744 cd /usr/ 745 du -s -s ./* 746 cd /usr/share/ 747 du -s -s ./* 748 cd /usr/share/nginx/ 749 du -s -s原创 2015-11-19 21:48:09 · 6866 阅读 · 0 评论 -
如何知道我在一堆数据中排第几std::partition
业务中遇到一个问题,有一堆数据,我需要知道我这个数据在那一堆数据中排第几。一般做法就是先把所有已知数据排序,再遍历找到我,那么就知道我是第几了。这么做好吗?回答是:好。那么请问是最好吗?不是最好。std::sort 复杂度std::partition 复杂度 ,O(n) ,n 为 last - firststd::distance 复杂度想起了一个叫做std::原创 2015-12-05 11:06:41 · 783 阅读 · 0 评论 -
如何在堆栈被破坏的情况下解决宕机问题
宕机不用怕,原来这样哒!通常在生产环境下如果遇到宕机,我们的做法很简单gdb调试core文件,可以看到程序的堆栈信息,就可以定位问题,解决问题。但是在某些情况下,堆栈信息由于某些原因被损坏了,bt打出来显示的全是??????那么如果想找到问题那就难办了。不过今天我们介绍一种,方法使用GCC内建函数__builtin_return_address(level) le原创 2016-01-08 13:42:46 · 2301 阅读 · 0 评论 -
如何统计一个新玩家在60天内的登录情况----std::bitset
业务需求:需要知道一个新建的账号在60天内登录的情况。机智的程序猿们都会想到用stl的各种关联容器去记录而后分析。经过仔细考量,本猿想到另外一种办法可以简单的实现该需求,并且可以使数据存储尽可能小。废话不多少,上代码:void Player::updateLoginStatistics(){ time_t now = Timestamp::now();原创 2016-02-16 13:57:12 · 553 阅读 · 0 评论 -
valgrind callgrind性能分析
1.请自行安装valgrind工具2.使用工具运行你的应用程序 valgrind --tool=callgrind ./sgzj-socialserver3.运行结束后,程序当前目录生成了一个文件callgrind.out.582374.python gprof2dot.py -f callgrind -n20 -s callgrind.out.58237 > valgri原创 2017-09-21 14:43:23 · 1294 阅读 · 0 评论 -
简洁的发包--网络游戏
单个协议数据(不含头)大小超过32字节,进行zlib压缩。单个协议发送数据大小不超过64K,如果超过了,在逻辑层把协议中数据,手动拆分多次发送。原创 2015-08-05 16:31:59 · 961 阅读 · 0 评论 -
map unordered_map hash_map比一比
map hash_map unordered_map 性能测试 2012-01-08 22:27:29分类: C/C++by zieckey测试条件:gcc version 4.2.1 20070719 [FreeBSD]FreeBSD 7.2-RELEASE #0: Fri May 1 07:18:07 UTC 2009转载 2015-08-17 15:34:40 · 422 阅读 · 0 评论 -
一致性hash算法 C++语言实现
一致性hash算法 C++语言实现 在《一致性hash算法(consistent hashing)》一文中已经介绍了一致性hash的基本原理,本文将会对其具体实现细节进行描述,并用c++语言对一致性hash进行了简单的实现。 一致性hash算法实现有两个关键问题需要解决,一个是用于结点存储和查找的数据结构的选择,另一个是结点hash算法的选择。 首转载 2015-08-07 18:19:27 · 1957 阅读 · 0 评论 -
C++ STL的底层数据结构都是啥
C++ STL 的实现:1.vector 底层数据结构为数组 ,支持快速随机访问2.list 底层数据结构为双向链表,支持快速增删3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问4.stack 底层一般用23实现,封闭头部即可,不用vector的原因应该是容量大小有限原创 2015-08-09 16:56:35 · 859 阅读 · 0 评论 -
gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-48)升级gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)
../base/zAStar.h:167: error: declaration of 'const int step'../base/zAStar.h:16: error: shadows template parm 'int step'原代码:virtual bool move(const int direct,const int step = step) = 0;修改后原创 2015-08-22 10:53:33 · 5555 阅读 · 0 评论 -
我想在linux下用json
jsoncpp在linux下的配置JSON 官方的解释为:JSON 是一种轻量级的数据传输格式。关于 JSON 更具体的信息,可参见 JSON 官网:http://www.json.org。jsoncpp 是比较出名的 C++ JSON 解析库。在 JSON 官网也是首推的。下载地址为:http://sourceforge.net/projects/jsoncpp(版本为j转载 2015-08-10 15:27:54 · 757 阅读 · 0 评论 -
安全删除STL容器元素
STL容器迭代过程中删除元素技巧(转)1.连续内存序列容器(vector,string,deque)序列容器的erase方法返回值是指向紧接在被删除元素之后的元素的有效迭代器,可以根据这个返回值来安全删除元素。vector c;for(vector::iterator it = c.begin(); it != c.end();){if(need_delete())转载 2015-08-11 21:57:56 · 628 阅读 · 0 评论 -
改天记得把自己那个代码中的改成这个boost::lexical_cast
c++数据类型万能转换器boost::lexical_cast .boost::lexical_cast为数值之间的转换(conversion)提供了一揽子方案,比如:将一个字符串"123"转换成整数123,代码如下:string s = "123"; int a = lexical_castint>(s); 这种方法非常简单,笔者强烈建议大家忘掉std诸多的函数,直转载 2015-08-12 10:38:40 · 407 阅读 · 0 评论 -
为什么求模运算要用素数(质数)—— 哈希表设计
为什么求模运算要用素数(质数)—— 哈希表设计 By admin | 2013 年 7 月 25 日 | 杂记, 编程技术在设计用除法来散射的哈希表时,我们都会用数值模哈希表大小,得到的余数来作为ID存入哈希表对应格子中。所有文章都表明要用一个较大的素数来作为哈希表的大小,也就是要模一个较大的素数。但为什么就是要用素数呢?简单分析一下可以看出玄机。先看看如果用一个转载 2015-08-12 11:52:20 · 15754 阅读 · 6 评论 -
__attribute__((constructor)) 高版本gcc不执行
__attribute__((constructor)) // 在main函数被调用之前调用__attribute__((destructor)) // 在main函数被调用之后调 static void func() __attribute__ ((constructor));void func(){ do();} 在项目中原创 2015-08-27 11:16:36 · 2837 阅读 · 0 评论 -
protobuf的数据类型和C++数据类型
protobuf支持的数据类型不是很丰富protobuf属于轻量级的,因此不能支持太多的数据类型,下面是protobuf支持的基本类型列表,一般都能满足需求,不过在选择方案之前,还是先看看是否都能支持,以免前功尽弃。同样该表也值得收藏,作为我们在定义类型时做参考。.proto typec++notesdoubled原创 2015-08-13 16:33:38 · 11413 阅读 · 0 评论 -
一款经典的服务器架构设计
本人自15年下半年起从事某知名IP游戏的后端研发工作,于16年中这款架构承载着我们的产品得以上线,截至现在整个后台服务的主要框架如下图所示。我们的产品是横板格斗类动作游戏,目前持续稳定盈利中。写下此文,别无它意,仅作记录耳。 服务器类型主要业务备注SuperServerTCP服务负责所有world服的数据同步 WorldServerTCP服务负责world下全局数据同步,负责跨服匹配业务 Game...原创 2018-05-06 14:55:25 · 4882 阅读 · 0 评论