草庐IT

GC优化

全部标签

c++ - 如果没有类重新实现 'virtual' 关键字是否可以优化掉?

当我在C++中定义一个类时,我总是将dtor定义为虚拟的。这是我在编写继承类时保护自己的方法。我想知道我是否要支付性能开销,即使我不会继承该类。例如:classAfinal{A();virtual~A(){printf("dtor");}};当我使用这个类时,dtor实际上是通过vtable调用还是作为静态dtor实现? 最佳答案 WhenIdefineaclassinC++Ialwaysdefinethedtorasvirtual.这是非常糟糕的做法。类应该被设计成多态的……或者不是。这也不仅仅是设计问题——多态性增加了开销。现在

c++ - SFINAE:函数模板优化

我想用成员函数模板以某种方式迭代一个元组(以便稍后从给定的模板类型T创建一个新类型的元组)。但是,没有使用中断条件(函数)所以我得到这个错误:invaliduseofincompletetype:'classstd::tuple_element>'问题似乎是,即使N==size的元组,std::tuple_element_t也被评估为N!=size并且不作为SFINAE处理。两个示例都显示了不同的无效解决方案。我做错了什么?注意:省略了使用is_same评估的函数以最小化示例。#include#includetemplatestructA{usingtuple=std::tuple;s

c++ - 如何优化在频繁调用的函数中将大型 std::unordered_map 重用为临时函数?

用一个工作示例简化了问题:我想多次重用std::unordered_map(我们称它为umap),类似于以下虚拟代码(它没有做任何有意义的事情)。我怎样才能使这段代码运行得更快?#include#include#includeunsignedsize=1000000;voidfoo(){std::unordered_mapumap;umap.reserve(size);for(inti=0;i在我的原始代码中,我想在umap中存储矩阵条目。每次调用foo时,键值从0到N开始,每次调用foo时N可以不同,但​​索引有10M的上限。此外,值可以不同(与此处始终为i*0.1的虚拟代码相反)。

c++ - 矩阵乘法优化

我正在对相当大的矩阵执行一系列矩阵乘法。运行所有这些操作需要很长时间,我需要我的程序在一个大循环中执行此操作。我想知道是否有人有任何想法来加快速度?我刚开始使用Eigen,所以我的知识非常有限。我使用的是ROOT-cern的内置TMatrix类,但执行矩阵运算的速度很差。我使用Eigen设置了一些对角矩阵,希望它能以更优化的方式处理乘法运算。可能是这样,但我真的看不出性能差异。//setupmatricesintsize=8000;Eigen::MatrixXfa(size*2,size);//fillmatrixa....Eigen::MatrixXfr(2*size,2*size)

c++ - 可以优化从临时对象创建复合对象吗?

我已经问了几个涉及这个问题的问题,但我得到了不同的回答,所以我认为最好直接问。假设我们有以下代码://SillyexamplesofAandB,don'ttakesoseriously,//justkeepinmindthey'rebigandnotdynamicallyallocated.structA{intx[1000];A(){for(inti=0;i!=1000;++i){x[i]=i*2;}};structB{inty[1000];B(){for(inti=0;i!=1000;++i){y[i]=i*3;}};structC{Aa;Bb;};Acreate_a(){retu

c++ - 我应该为 C++ 库使用什么优化设置

我想编写一个(静态)库供其他程序员使用,它使用了编译器的优化。在使用调试版本编写和测试库时,我发现它运行得相当慢,但如果我切换到发布版本,那么它的速度似乎可以接受。目前,我已将该库编译为调试版本,并在另一个项目中使用它,我注意到它运行得有多慢,但如果我尝试将我的新项目切换到发布版本,则链接失败并出现很多这样的错误:LIBCMTD.lib(tzset.obj):errorLNK2005:__tzsetalreadydefinedinMSVCRT.lib(MSVCR90.dll)在构建我的库时我应该使用什么设置,以便程序员可以在他们自己的项目中使用该库,以便无论他们使用调试还是发布构建,它

国赛 mathorcup数学建模竞赛中的优化问题

数学建模优化类题目主要是通过数学工具和方法,对现实问题进行建模,并找到最优的解决方案。下面介绍一些常见的分析及解题思路。1. 确定问题的目标函数和约束条件:首先,需要明确问题的目标,包括最大化或最小化某种指标,如最大利润、最小成本等。同时,还要考虑问题的约束条件,包括资源限制、技术要求等。2. 建立数学模型:根据问题的特点,选择合适的数学模型。常见的建模方法包括线性规划、非线性规划、整数规划、动态规划等。3. 优化方法选择:根据问题的性质和模型的特点,选择适当的优化方法。常见的优化方法包括最优化算法、梯度下降法、遗传算法、模拟退火等。4. 求解算法实现:将选择好的优化方法转化为具体的求解算法,

C++11 for_each 和 lambdas 优化

我正在测试以下代码:#include#include#include#includeintmain(intargc,char*argv[]){std::vectorv(10000000);clock_tthen=clock();if(argc我正在使用g++4.6编译它,没有任何优化标志,这是我得到的:[javadyan@myhostexperiments]$./a.out260000[javadyan@myhostexperiments]$./a.outaaa330000[javadyan@myhostexperiments]$使用-O1优化会产生以下(意料之中的)结果:[javad

c++ - 优化开关——它们到底做了什么?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。可能每个人都使用某种优化开关(对于gcc,我相信最常见的是-O2)。但是gcc(以及VS、Clang等其他编译器)真正在存在这些选项的情况下做了什么?当然没有确定的答案,因为这在很大程度上取决于平台、编译器版本等。但是,如果可能的话,我想收集一套“经验法则”。我什么时候应该考虑一些技巧来加速代码,什么时候应该把工作留给编译器?例如,编译器会在这样的(有点

c++ - 如何通过缓冲区大小来优化读写?

如何在标准C++/C++11(无POSIX函数)中优化std::ifstream和std::ofstream的读写速度?(1我不知道缓冲区的确切作用所以你能确认一下吗:对于读取:文件的很大一部分预加载到内存中(因此缓冲区大小定义了这大部分的大小)(2)用于写入:数据写入内存,一旦缓冲区已满,它就会从内存传输到文件系统(3)如何设置std::ifstream和std::ofstream的缓冲区大小?(4)考虑到我使用非常大的二进制文件(几个10GB),并且文件系统通常是读取/写入大型文件的最佳选择,我可以定义一个大约100MB的缓冲区大小吗?如果它会降低性能,为什么?(5)最后,从ifs