- 博客(25)
- 收藏
- 关注
原创 OpenMP:变量作用域
使用 lastprivate 子句声明的变量在并行区域内有线程私有副本,但在退出并行区域时,最后一个执行的线程的私有副本将被赋值给相应的共享变量。int x;i < n;// 最后一个迭代的x值被捕获// 现在x等于最后一个线程的x值。
2024-04-21 20:08:27 973
原创 OpemMP指令: 共享任务构造
共享任务构造(Work-Sharing Constructs)将并行区域的代码执行分配给不同的线程,该指令不产生新的线程,进入共享工作区域不会有同步屏障(barrier),退出共享任务构造的时候会有隐式的同步屏障。
2024-03-22 20:46:41 385
原创 OCCT BRep数据结构
OCCT的拓扑数据结构定义在TopoDS(Topology data structure)为前缀的类中,分为两套派生结构,TopoDS_Shape和TopoDS_TShape
2024-03-20 22:17:19 428 1
原创 OpenMP API 概述
OpenMP API 包括三个独立的组件编译器指令运行时库例程环境变量不同的实现对API组件的支持有所差异,应用程序开发人员决定如何使用这些组件,对于简单的情况,只需要其中的一部分。
2024-03-11 20:01:43 946 1
原创 OpenMP简介
OpenMP 是一个应用程序接口 (API),由一组主要的计算机硬件和软件供应商共同定义。OpenMP 为共享内存并行应用程序的开发人员提供了一个可移植、可扩展的模型。该 API 支持各种架构上的 C/C++ 和 Fortran。
2024-03-10 20:40:06 378 1
原创 OpenCascade源码剖析:Handle类
Handle其实就是智能指针的上古版本,了解一点C++11的应该对shared_ptr非常熟悉,那么你就把Handle当做shared_ptr来理解就没有任何问题了。
2024-03-08 20:30:51 374 1
原创 OpenCascade源码剖析:Standard_Transient根类
Standard_Transient是OCCT继承体系最顶层的根类,Standard_Transient类主要提供了三个机制,内存分配,RTTI和引用计数。
2024-03-07 21:52:03 716 1
原创 C++模板元一生之敌之:std::disconjunction
disconjunction是上篇介绍的conjunction的同胞兄弟,模板参数包中至少有一个为ture时,其value为true,相当于对一系列类型特性(type traits)做逻辑或
2024-03-01 21:36:33 264 1
原创 C++模板元一生之敌之:std::conjunction
std::condition相当于对一系列类型特性(type traits)做逻辑与(And),例如conjunction<T1,T2,T3,>,如果T1,T2,T3能够萃取出bool类型的value,那么上面试式子相当于T1::value && T2::value && T3::value,按照惯例先看应用场景,condition可以用来判断一系列类型是否相同。想要理解这几行代码,首先需要理解递归模板,相信诸位接触过模板元的都知道用模板实现递归计算阶乘的代码。
2024-02-29 20:50:49 383
原创 C++ STL分配器rebind
大部分人在学习STL源码的时候,都会参考侯捷老师的《STL源码剖析》,在第二章介绍分配器的时候,出现过rebind的身影:这段代码神秘的出现在了这里,然后了无后续,相信给很多人造成了STL修仙练气期的心里阴影。
2024-02-27 19:43:37 544
原创 高斯积分和代码实现
高斯积分是有限元中常用的数值积分方法,由于有限元插值函数一般为多项式,被积函数一般也是多项式,高斯积分使用很少的积分点,就能达到较高的积分精度。
2024-02-26 19:50:21 658 1
原创 C++惯用法之:copy and swap idiom
如果拷贝构造函数中发生了异常,对象就不会被修改,因为当前对象的状态只在交换操作中发生变化,这使得整个赋值操作在异常发生时,对象状态仍然保持一致。考虑一个类,其中有成员变量是指针,而拷贝赋值操作需要分配内存,如果分配失败,将抛出异常,如果在这个过程中抛出异常,可能会导致对象的数据处于损坏的状态。这种方法的基本思想是,首先通过深拷贝源对象(operator = 右边的对象)创建一个临时对象,然后与当前对象进行交换。这样,传入对象的资源会转移到当前对象,当前对象原有的资源也能正确释放。操作中抛出了异常,对象的。
2024-02-25 21:40:17 570
原创 STL迭代器引发的崩溃问题
1、写符合C++规范的代码,通过基类指针析构子对象,没有虚析构函数是不符合规范的代码,不符合规范就容易坑你。2、STL的调试版迭代器还是很强大,这种防御性编程,能够帮你快速的定位到程序潜在的问题,否则无端的崩溃会让你怀疑人生。
2024-02-23 21:25:34 1092
原创 C++ std::vector和移动优化
移动语义下,vector扩容时就有了优化的空间,毕竟原来对象的资源是可以重复使用的,vector也确实使用移动构造来代替拷贝构造,但是这种优化是有限制的,即vector中存储对象必须有移动构造函数,而且需要是noexcept的。因为移动构造会损坏源对象,如果对象移动的过程中发生了异常,那么原来的vector的数据就处于损坏的状态,而且不可恢复,为了保证异常安全,因而才有noexception的限制。对于左值,直接用拷贝构造函数构造在容器,对于右值,直接用移动构造构造在容器,只需要调用一次构造函数。
2024-02-21 08:00:51 1284 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人