草庐IT

PERFORMANCE

全部标签

c++ - std::vector 的性能差是因为没有调用 realloc 的对数次数吗?

编辑:我又添加了两个基准测试,以比较realloc与C数组的使用以及reserve()与std::vector的使用。从最后的分析来看,realloc的影响似乎很大,即使只调用了30次。检查文档我猜这是因为realloc可以返回一个全新的指针,复制旧指针。为了完成这个场景,我还添加了用于在初始化期间完全分配数组的代码和图表。与reserve()的区别是显而易见的。编译标志:仅图中描述的优化,使用g++编译,仅此而已。原始问题:我对std::vector与新建/删除数组进行了基准测试,当我添加10亿个整数时,第二个代码比使用vector的代码快得多,尤其是在优化的情况下开启。我怀疑这是v

C++计时,自上一秒以来的毫秒数

我正在开发一个C++应用程序,它需要精确到毫秒级的详细计时信息。我们打算使用标准time()收集精确到秒的时间在中发挥作用.我们还想收集自time()给出的最后一秒以来经过的毫秒数。.有谁知道获取这些信息的便捷方法吗? 最佳答案 Boost.DateTime具有毫秒和纳秒表示形式如果底层平台支持它们。当它使用特定于平台的代码时,它会将这些细节保留在您的代码之外。如果这很重要,他们确实有另一种方法来进行独立于平台的亚秒级分辨率。Thispage几段下来讨论了如何去做。(来自页面)例如,假设我们要使用表示十分之一秒的计数来构造。也就是说

c++ - 我如何计算 C++ 中的操作?

我如何计算C++中的操作数?我想以更好的方式分析代码,而不仅仅是计时,因为时间通常四舍五入为0毫秒。 最佳答案 如果您是计时代码,值得在循环中多次运行它以避免计时器分辨率的影响。因此,您可能会运行正在计时的事物10,000次,并测量运行所有迭代所需的时间。运行可能只需要几秒钟,您将获得更好的计时数据。 关于c++-我如何计算C++中的操作?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questi

c++ - 为什么分配堆内存比分配栈内存快得多?

我尝试在堆和栈内存中为10^7个整数分配空间,看看哪个更快。显然在堆内存中分配要快得多,但我不明白原因。#include#includeusingnamespacestd;usingnamespacestd::chrono;intmain(){high_resolution_clock::time_pointt1=high_resolution_clock::now();int*p=newint[1e7];high_resolution_clock::time_pointt2=high_resolution_clock::now();autoduration=duration_cast

c++ - C++ 运算符的性能

C++中的算术运算符之间是否存在任何性能差异,或者它们的运行速度都一样快?例如。“++”比“+=1”快吗?“+=10000”呢?如果数字是float而不是整数,是否会有显着差异?“*”是否比“+”花费的时间明显更长?我尝试对“++”、“+=1”和“+=10000”各执行10亿次。奇怪的是,时钟周期数(根据time.h)实际上是违反直觉的。人们可能会认为,如果其中任何一个最快,则为“++”,其次是“+=1”,然后是“+=10000”,但数据显示出轻微的相反趋势。这种差异在100亿次操作上更为明显。这都是整数。我是学科学计算的,所以想测试算子的性能。例如,如果任何运算符的操作时间与输入呈线

C++ 返回值与异常性能

我在某处读到,现代英特尔处理器具有用于实现异常的低级硬件,大多数编译器都利用它,结果是异常变得比使用变量返回结果状态更快。这是真的吗?就返回状态/响应状态而言,异常是否比变量更快?阅读有关该主题的堆栈溢出似乎与此矛盾。谢谢 最佳答案 请注意,“异常处理程序”一词存在歧义。我相信您会发现硬件人员在谈论异常时意味着:硬件中断,又名信号,其处理程序有时称为异常处理程序(参见http://pages.cs.wisc.edu/~smoler/x86text/lect.notes/interrupts.html)机器检查异常,如果硬件出现问题会

c++ - 降低 o(n^3) c++ 代码的复杂性

我想降低以下算法的复杂性。基本上,它以一个词作为输入并计算其中唯一字母的数量(该词的“熵”)。我当前的解决方案采用3个嵌入式for循环,复杂度为o(n^3)。由于这段代码是一个更大项目的一部分(我们为名为boggle的游戏构建了一个求解器),我希望降低算法的复杂性以减少其执行时间。提前致谢!intwordEntropy(stringword){intlength=word.length();intuniquewords=length;stringcompare=word;charsave[17];intcond=0;for(intii=0;ii0){break;}uniquewords

c++ - 对于受 CPU 限制的应用程序,您会推荐哪种语言/平台?

我正在开发非交互式cpu绑定(bind)应用程序,它只进行计算,几乎没有IO。目前它工作时间太长,在我努力改进算法的同时,我也在考虑它是否可以为更改语言或平台带来任何好处。目前它是在使用英特尔C++编译器编译的Windows上的C++(没有OOP,所以它几乎是C)。切换到ASM有帮助吗?帮助有多大?切换到Linux和GCC会有帮助吗? 最佳答案 只是要彻底:要做的第一件事是收集配置文件数据,第二件事是考虑您的算法。我相信您知道这一点,但它们必须#included到任何性能编程讨论中。直接回答您的问题“切换到ASM有帮助吗?”答案是“

c++ - 为什么这段代码这么慢?

所以我有这个函数用来计算统计数据(最小/最大/标准/平均值)。现在问题是这通常在10,000x15,000矩阵上运行。矩阵存储为vector>在类(class)里面。现在创建和填充所述矩阵非常快,但是当涉及到统计部分时,它变得非常慢。例如一次读取一个像素的geotiff的所有像素值大约需要30秒。(这涉及大量复杂的数学运算,以将像素值正确地地理配准到相应的点),计算整个矩阵的统计数据大约需要6分钟。voidCalculateStats(){//OHGODdoublenew_mean=0;doublenew_standard_dev=0;intnew_min=256;intnew_max

c++ - rate++a,a++,a=a+1 和 a+=1 在 C 中的执行效率。假设 gcc 是编译器

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:Isthereaperformancedifferencebetweeni++and++iinC++?对于以下的使用,请以C语言的执行时间来评价。在一些采访中,我被问到我应该使用这些变体中的哪个以及为什么。a++++aa=a+1a+=1