![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 72
哈市雪花
图形几何、数据处理、并行计算相关研究和研发,公众号:geometrylib,欢迎交流
展开
-
从线段中搜寻闭合轮廓
最近在研究怎么从一堆线段中提取闭合轮廓,以前用过相关的库,忘记名字了,记得是构造了TopoPolygonTree,可以获取最大外轮廓,以及构成该最大外轮廓的其他轮廓,而内部轮廓是以树的形式表示,每个树节点是一个轮廓,树节点的深度(node.deep % 2 == 0?outer : inner)代表其是外轮廓还是内轮廓。重新搜索研究,进行代码的测试和问题修改,简单记录如下。原创 2024-07-17 18:56:32 · 878 阅读 · 0 评论 -
将点作为C++ map容器key值时的踩坑记录
空间点具有X,Y,Z坐标等数据,一些情况下我们需要将点作为map容器的key值,比如识别重复点或处理轮廓等情况。原创 2024-05-31 18:55:06 · 368 阅读 · 0 评论 -
记录rapidjson写出json时发生截断问题的处理
rapidjson性能非常棒,在处理大数据量的情况下性能要远优与cjson,是读写json的最佳选择库之一。该库也是腾讯开源的库,很多国外的库也在使用,如ODA等;在处理一个大文件,转出json时发生了json被截断的情况,也没有报错,真是一时不知从何下手,那就调试吧~原创 2024-04-22 18:18:28 · 375 阅读 · 0 评论 -
C++正则表达式笔记
(2)C++正则匹配实现提取两个指定字符串之间的字符串。最近翻了翻正则表达式的一些资料,做个记录。(3)替换两个字符串之间所有出现的字符。(1)正则匹配两个字符之间的字符串。(1)正则匹配两个字符之间的字符串。3、正则表达式基础语法大全。2、正则表达式语法简介。原创 2024-02-21 10:35:33 · 540 阅读 · 0 评论 -
关于控制程序内存的几点思考
写在前面 控制系统内存是常见的一个话题,一般三维设计软件内存控制的普遍较好,当然一方面是开发时间较长,投入较多,当然另一方面也是相应的开发团队技术经验较丰富,有较好的系统架构和内存管理机制。当然也会有一些软件或产品内存控制的不好,用户使用体验较差。 博主混迹于CSDN已有数年,也有一些经验,适逢周末惬意,闲暇时光中进行一些总结记录以供自己和需要的人参考。思考系统逻辑较复杂,运行时内存占用较高且不稳定,该怎么办?博主认为所谓系统逻辑复杂本是个伪概念,一个系统确实有...原创 2021-08-22 17:21:57 · 908 阅读 · 0 评论 -
矩阵求逆的简单记录
写在前面话说第一次完整的编写矩阵求逆函数是在写结构力学求解器时候,那时候用的是初等变换法,效率较低,不过那时候还没顾得上效率,求解器没有开发完整,记得只支持连续跨简支梁求弯矩(不记得这个术语还准确不...),好吧,是时候引出正文了。4X4转换矩阵求逆方法求逆矩阵方法很多,效率不一,而研究矩阵数据结构的设计就可以是一个领域了,怎么样占用内存小?怎么样运算效率高,当然本文不涉及这些的研究,有兴趣可以自行搜索学习这方面知识。https://zhuanlan.zhihu.com/p/500.原创 2021-07-22 23:19:22 · 2027 阅读 · 1 评论 -
VS检测内存泄漏C++程序
1. 写在前面最近在优化程序,节点紧,事情多,写的急...总之就是程序性能有问题,处理大模型就遇到瓶颈了。咋办?重构优化喽。首先,博主把程序中主要占内存或需要频繁使用的对象都用工具类统一进行内存申请、使用和释放,具体的:可以复用的且需要用来进一步处理计算的对象统一管理起来,方便复用,减少重复处理,所谓GetOrCreate是也 需要大量的申请、使用和释放的对象统一管理起来 需要周期性频繁使用的对象统一管理起来,这样也可以减少内存申请和释放 一次性处理占内存大的时候,那就分批处理 对象池也原创 2021-06-02 23:57:59 · 1466 阅读 · 3 评论 -
猜想:string的compare是非线程安全的
写在前面之前碰到过map.find死循环的情况:记录使用map遇到的很奇怪的问题,map find()陷入死循环现在是同样的程序,也发生了程序“停滞”(即内存占用没有变化,CPU占用高,程序实际像死锁一样)!哎还是绕不开string的compare,无论是string本身的还是strcmp,而多线程情况下使用都可能会“死循环” “假死锁”,展开猜测string的compare(包括strcmp)是非线程安全的其他关于C++ stl string的线程安全性问题http://原创 2021-05-24 18:33:36 · 845 阅读 · 1 评论 -
zlib解压缩zip/gzip使用总结
写在前面zlib库很好用,包括一些前端/ios库都集成了该库用于解压缩相关,本文根据作者实际使用做个简单的总结。正文使用zlibwrap库进行解压缩,该库对zlib做了封装,提供简洁的接口BOOL ZipCompress(LPCTSTR lpszSourceFiles, LPCTSTR lpszDestFile, bool bUtf8 = false);BOOL ZipCompress(std::vector<LPCTSTR> lpszSourceFiles, LPCTST原创 2021-05-22 14:03:34 · 1782 阅读 · 0 评论 -
C++字符串转为大写/小写
说在前面最近紧急处理bug时候,想进行C++的字符串大小写转换,发现好像之前没有用到过?!,顺带说一下C#的是真的方便~,其实并不是没有,而是之前真的没有用过,那么需要用了,就查查吧,实践测试一下,有多种方法。正文有多种方法,可以使用C语言标准库函数toupper,tolower 以及对应的unicode版本 twoupper,twolower 可以使用C++标准库中的_strlwr_s, _strupr_s 以及对应的unicode版本 _wcslwr_s, _wcsupr_s 可原创 2021-05-22 13:45:54 · 7719 阅读 · 1 评论 -
微软glTF-SDK代码示例及源码研究
上一篇:GLtf读写库的初步研究1.glTF-SDK现状及问题1、接口使用较为方便;有简单示例;2、研究源码及示例,仅支持连续的addAccessor(),即连续的add绑定同一bufferView的Accessors,比如很多个mesh,(1)只能统一获取所有的indices(positions、uvs)再连续的addAccessories,绑定到一个indices的bufferView上;然后再绑定positions的,其次再绑定uvs...,这样流程不太 方便,占内存较大;(2)对于每原创 2021-03-11 23:10:12 · 2281 阅读 · 3 评论 -
记录使用第三方库编译Error LNK2019 无法解析的外部符号问题:wchar_t
1.背景使用第三方库在编译时出现了链接错误:Error LNK2019 无法解析的外部符号unsigned short* XXXX(XXX);2.问题分析使用的第三方库在编译时设置了将wchar_t作为内置类型处理,而当前开发的程序由于条件限制(依赖的其他库是将wchar_t作为unsigned short处理,并且当前编译环境为某公司在VS上二次开发的编译环境,虽说支持设置编译选项,但开启/Zc:wchar_t后该编译环境却“不认识”),因此要改当前的wchar_t解释是不可行的(当前是作原创 2020-12-20 20:59:31 · 708 阅读 · 0 评论 -
C++/C# Thread多线程总结
1.背景 一直都想写一篇关于多线程的文章,总结一下这方面的知识,也为自己和有需要的人提供参考,不再赘述,开始吧,现在计算机一般都是多核的,4核和8核的比较多件,用于线上计算或专用工作的计算机更是大概率“土豪”级别,如果不充分利用计算机的这一资源,那么将是一种浪费,尤其在现在行业竞争激烈,拼性能的时代,充分利用有限的计算机资源显得尤为重要,试看一下你用visual studio编译项目时,自己电脑的cpu使用率会多高?没错,接近100%!你所用的开发工具都在充分利用多核资源,节省你开发...原创 2020-12-19 16:40:18 · 1550 阅读 · 1 评论 -
记录使用map遇到的很奇怪的问题,map find()陷入死循环
1.背景最近在一个项目中使用const char*作为map的key,然后定制比较器,一般情况下程序运行没问题,但是在线上运行时会有一定几率发生“死锁”的情况,直观表现就是程序一直不退出,内存占用很稳定,不增不减,CPU在占用,并且有波动,但根据占用率数据来看是一个线程在跑,如果死循环的话不应该是没有CPU占用了吗?好吧,进行了两天多的调试分析,修改,终于定位出问题所在了。是map.find()时候发生了死循环,导出当前锁的占用者线程卡在find()里不出来,也就无法释放锁;而其他线程在等待锁,原创 2020-12-14 00:35:23 · 3437 阅读 · 2 评论 -
c++ map find方法源码解析
1.背景最近,发生了一次奇怪的问题:用const char*作为map的key,定制比较器(采用strcmp实现),同时用了多线程的技术,在map.find()时候有几率发生死循环,通过windbg调试定位问题,发现是在map.find()时候发生了死循环,进而导致执行该过程的线程拿到锁了,但无法释放,后续其他线程一直等待该锁,从而发生假的“死锁”(实际为死循环)。结合map的源码、对应DMP文件的堆栈和相关变量额值(主要为发生死循环的map)以及map的数据结构来分析死循环的原因。2.原创 2020-12-13 23:06:15 · 3406 阅读 · 0 评论 -
error LNK2001: unresolved external symbol 解决思路及例子
打开输出窗口,选中error,按F1,弹出关于该错误的帮助页面帮助页面上会详细列出出现该错误的各种可能原因,对照一下,看看自己可能犯了哪种错误 如果还找不到原因,可以看输出窗体中是编译哪个文件时候出的这个错误,针对性的分析该文件相关内容是否有错 如果还找不到原因,好吧,我今天就是百思不得其解,抓狂,那么可以从编译链接过程分析下,可能是头文件中有该接口定义,但链接时没有找到实现,什么?你实现了?还有这个错误?确定?这种也是可能的,这时候看有没有该接口所在的cpp文件编译生成的中间文件.ob原创 2020-11-28 19:59:18 · 11887 阅读 · 0 评论 -
C++指针数组释放问题
记录一个经典的问题,在群里有被问到这个问题,如下,请问这段代码中delete[]b为什么可以正确运行呀?b1,b3同时指向了一个指针a,delete[]b的时候不会重复删除吗?答:b为指针数组,也是个数组,只不过元素为指针;delete[]b;是释放数组b的资源,这时候b仅仅是个数组,仅释放数组b本身的资源,没有释放数组b中元素(数组)的资源,delete[]b后a的资源根本没释放掉。...原创 2020-11-11 22:20:53 · 2726 阅读 · 0 评论 -
c++ map部分用法关键点的记录
1.原理1.1.简述c++中map数据结构为红黑树(平衡二叉树的一种特化),搜索的复杂度为O(logN),其他的操作不在此叙述,读者可以自行在MSDN上查找详细字段和函数的含义及用法示例。1.2.数据结构每个节点数据构成如下,x64环境下,一个空的map大小为24个字节,与上图对应,一个节点占用内存为24个字节。1.3.初始化大小如下图,对于一个初始化的map,其head节点,以及head节点中的left、right、parent节点值是一样的,并且是是递归重复的,由原创 2020-11-02 00:47:26 · 686 阅读 · 0 评论