C++
不二星空
厚积薄发
展开
-
boost::asio异步调用-socket.close引起崩溃
boost意外崩溃问题调查原创 2022-05-15 23:10:33 · 1047 阅读 · 4 评论 -
线程同步:condition_variable的隐患
线程同步:condition_variable的隐患原创 2022-03-22 19:55:05 · 2151 阅读 · 0 评论 -
跨平台格式化输出int64_t
由于Windows和Linux两平台对于int64_t的定义不一致,所以会导致告警。如果无视这些就警告的话实际上使用lld或者llu,就可以正确输出信息。(gcc报错需要添加-Wall -Wno-format-overflow)本着不能有警告的原则,需要寻找出完美的解决方案。首先出现问题的原因:系统对于int64_t的认定不一致Windows下推荐使用的是:%lld、%I64d、%IdL......原创 2021-07-03 18:24:01 · 2723 阅读 · 0 评论 -
Mysql插入emoji表情失败解决办法
emoji插入失败是大概率是因为utf8编码问题因为mysql支持的utf8编码最大字符长度为3,而emoji的编码是4字节的,所以导致mysql插入检测时出现问题。解决办法如下:1、表格使用utf8mb4编码2、通过set names命令设置会话字符集对于JDBC连接串设置了characterEncoding为utf8,或者做了上述配置仍旧无法正常插入emoji数据的情况,建议在代码中指定连接的字符集为utf8mb4,示例代码如下。String query = “set names utf8m原创 2021-03-16 20:16:46 · 410 阅读 · 0 评论 -
案例分享:fatal error C1001: 编译器中发生内部错误
1>正在生成代码1>c:\********************************\src\thread.cpp : fatal error C1001: 编译器中发生内部错误。1>(编译器文件“d:\agent\_work\1\s\src\vctools\compiler\utc\src\p2\main.c”,第 187 行)1> 要解决此问题,请尝试...原创 2019-12-18 19:24:51 · 12469 阅读 · 3 评论 -
lib中定义的静态成员变量不一定唯一
今天偶然间遇到一个BUG,我主工程和一个DLL工程同时使用了同一个lib中的静态成员变量。调试过程中就发现静态成员变量赋值后,到DLL中竟然没有值。 后来发现原来主工程和DLL工程有各自生成了一个静态成员变量,导致和预想的执行效果不一致,我想可能与主工程和DLL工程中的独立的栈空间有关,具体原因还没有深究过,不过这个比较隐晦的问题要注意下,调查起来比较麻烦。...原创 2018-09-13 22:19:52 · 582 阅读 · 0 评论 -
VS2017+Win10内存泄露工具调研分享
最近刚升级到了VS2017进行项目开发,在准备做内存泄露调查的时候遇到了之前常使用的工具无法正常工作的问题,分享下1、LeakDiag vesion:1.25.28.2201会出现以下问题: a.无法识别到要检测的程序 b.设置PDB路径之后,无法启动检测 c.据说不支持x64,未验证2、Tencent TMM内存检测工具通过启动程序后无法识别到...原创 2019-05-16 08:39:03 · 2257 阅读 · 0 评论 -
C++11风格的vector循环小坑注意
C++11新引入了类似如下分隔的遍历方式 for(auto iter : vectorTemp) 使用的时候需要注意iter变量是否需要加上引用,不然可能导致程序执行的效果不符合自己的预期。例子如下 typedef std::map<int, int> MAP_TEST_TEMP; typedef std::vec...原创 2019-05-16 19:13:15 · 1189 阅读 · 0 评论 -
性能-Windows内存中断-页面错误(page fault)
最近准备项目上线,做了大量的压测工作,发现了在有些机器上会出现大量的页面错误,这些错误会导致内存中断。然而实际的测试数据来看,分两种情况,有大量中断不影响性能和有大量中断影响性能。经过调查发现:大部分的文章中只提及的page fault会导致系统从硬盘中获取内存,导致效率下降。而实际上内存中断分为软中断和硬中断。软中断:内存实际还在物理内存中,但是已经移出working set。只...原创 2019-06-18 20:24:49 · 5781 阅读 · 0 评论 -
联合编译的神坑Error D8037
最近安装一个专门用于编译发布的机器遇到的神坑问题记录分享下,避免大家再绕进去。。。首先问题描述:Win7上Incredibuild编译时出现错误D8037:无法创建临时 il 文件;清除临时目录中的旧 il 文件(可疑点一)查了网上的资料清一色的说需要删除卸载KB3126587 和KB3126593两个补丁以及还有可能需要删除的KB4012212的补丁KB4012212据说是预防勒索病...原创 2019-07-05 09:48:05 · 1050 阅读 · 0 评论 -
小心浮点数溢出
平时编码相对关注整形溢出情况,对于浮点数考虑溢出情况关注较少,因为计算性能的缘故本身使用浮点数的时机就很少,而且也很少会用到较大的数。但是如果使用pow之类的函数的时候,就要关注下是否会有溢出的情况。例如:double fTemp1 = pow(-1.2, -1.2); // 会得到-nan(ind)double fTemp2 = pow(10.0, 330.0);...原创 2019-09-06 17:14:13 · 3283 阅读 · 0 评论 -
意外,Openssl出现死循环的问题
最近调研和研发关于c++支持ws和wss协议的网络底层,意外发现了Openssl内部出现死循环的情况。网络底层采用boost::asio和Openssl的方式支持wss协议。 平时使用都是正常,等到最近压测的时候发现,一段时间后会出现死循环的情况,经过一段时间的调查发现竟然是Openssl底层导致的死循环,死循环的堆栈的信息如下:19:40:03.441 d:\tddownload...原创 2018-09-13 22:14:23 · 726 阅读 · 1 评论 -
getpeername接口部分系统返回失败,LastError=10014
今天遇到个问题,我的系统win7系统下使用getpeername接口获取IP可以,但是我同事的win10却不行,接口调用返回失败,获取的错误码为10014.网络上找到一个相关的文章:https://blog.csdn.net/readyisme/article/details/28249883查看MSDN对应的描述(https://msdn.microsoft.com/en-us/library/...原创 2018-04-21 22:42:50 · 1698 阅读 · 0 评论 -
Raknet性能调研
(1)Raknet理论上可以支持多个客户端和服务器之间每秒4W个消息的ping-pong测试。但是不稳定,如果某些原因导致消息堆积,则会严重影响发送和接受的响应时间,会达到秒级。(2)Raknet如果消息超过承受的极限,底层的逻辑上导致不断会恶化卡的现象,表现出现吃内存,底层线程陷入循环,执行效率下降。(3)目前的Raknet版本不支持发送线程,虽然有发送线程的宏,但是打开后编译不过,还未原创 2016-06-27 19:56:01 · 2303 阅读 · 0 评论 -
boost shared_ptr的注意事项记录
(一)切勿将一个指针放到两个shared_ptr中管理,否则就会出现各种catchvoid TestFunc(){ testPtr* test = new testPtr; shared_ptr testPtr1(test); test = testPtr1.get(); shared_ptr testPtr2(test);} testPtr2会先释放testPtr所原创 2015-03-16 08:57:30 · 592 阅读 · 0 评论 -
enable_shared_from_this使用
enable_shared_from_this,目前了解主要是为了方便类的内部使用,而产生的一种东西,内部实现利用weak_ptr,在对象的指针初始化shared_ptr时,会初始化weak_ptr,然后类内部就可以使用shared_from_this()。 参考内容和链接:http://www.cnblogs.com/lzjsky/archive/2011/05/05/2原创 2015-03-16 20:12:33 · 489 阅读 · 0 评论 -
vector容器的坑
#include #include struct C { int id; C(int n) : id(n) { std::cout << "C(" << n << ")" << std::endl; } ~C() { std::cout << "~C() id=" << id << std::endl; }};void test(){ std::vector vec;原创 2015-03-13 11:06:03 · 489 阅读 · 0 评论 -
vs2010 link : fatal error lnk1123: 转换到 coff 期间失败: 文件无效或损坏
今天遇到这个问题,记录下。 此次的原因猜测可能是因为同时装了vs2010和2013导致。 解决办法,复制2013安装目录下的cvtres.exe到对应的vs2010安装目录。 网络上还有其他解决办法,但是对于我这种情况无效。 办法如下: 点击“项目”-->“属性” --> “清单工具”, 然后选择"输入和输出’ --> ‘嵌入清单’,将后面的‘是’原创 2015-07-23 15:33:47 · 367 阅读 · 0 评论 -
Windows程序内存限制记录(堆大小的限制)
测试环境:E3-1231 v3 内存16G程序内存的上限:32位:1.97G64位:7.60G达到该峰值,程序运行将无法从堆中分配内存,会报异常。原创 2015-10-13 16:55:13 · 4452 阅读 · 0 评论 -
关于SO_LINGER 设置
TCP连接断开的时候调用closesocket函数,已经讨论过有优雅的断开和强制断开,那么如何设置断开连接的方式呢?是通过设置socket描述符一个linger结构体属性。linger结构体数据结构如下:struct linger{ int l_onoff; int l_linger;};有三种组合方式:第一种转载 2015-09-24 16:34:17 · 1365 阅读 · 0 评论 -
boost::lockfree::queue记录
(1)pop的坑boost::lockfree::queue msgQueue;若循环中如下调用Point * pPoint = NULLmsgQueue.pop(pPoint);若pop返回值是false,一般按常理会认为pPoint是空值,但是实际测试中pPoint不是空值。所以不能以pPoint的值是否改变作为后续逻辑的判断条件。(2)队列测试测试环境1原创 2015-10-24 22:44:01 · 6762 阅读 · 2 评论 -
运行库不一致导致的问题(/MDd /MTd)
如果出现如下问题 error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”1>LIBCMTD.lib(tzset.obj) : error LNK2005: __tzset 已经在 MSVCRTD.lib(MSVCR120D.dll) 中定义可以考虑是否链接的lib的原创 2016-02-14 11:35:59 · 2698 阅读 · 0 评论 -
strcpy_s的坑
因为安全的问题将strcpy替换为strcpy_s使用,一直没注意strcpy_s这类函数对于剩余内存的处理。直到某次调试出了点问题,一看内存,剩余的内存全部被填充了FE。与之前的认知发生了冲突。于是查阅了资料,发现确实是这种情况。而且还不止这个一个函数会这样。 官方的解释:strncat_s、_strncat_s_l、wcsncat_s、_wcsncat_s_l、_mbsncat_s原创 2016-04-06 15:40:05 · 2626 阅读 · 0 评论 -
网络编程 - boost::asio优雅的退出
boost::asio算是一个比较成熟的网络库,不过在某些方面在异步上的接口实现却不是很友好,感觉官方的很多文档描述的都太简单了,甚是忧伤。 回归正题,最近一直在研究asio的关闭流程,发现相关的信息确实不多。简单总结了下大致就是先关闭 socket再关闭io_service。但是内部有很多细节的问题没有考虑到。 总结的一些注意点,分享下 1、一定要确原创 2017-01-18 20:26:32 · 7751 阅读 · 1 评论 -
我希望在20岁时就知道的26条时间管理技巧
该文转自:http://blog.csdn.net/guobin_lu/article/details/8816690几天前在 Slideshare 上看到 Etienne Garbugli 的一个关于时间管理的幻灯片,觉得挺不错,值得分享。另外由于 Slideshare 被墙,顺带保存分享到墙内。如果译文有不到位的地方,烦请指出,谢谢。01. There is alway转载 2013-04-19 11:26:32 · 540 阅读 · 0 评论