草庐IT

PERFORMANCE

全部标签

c++ - std::vector 推速?

我正在使用vector来管理我的大型结构数据。但是突然间,当发现vector源代码时,我很惊讶地看到下面的一些代码:inlinevoidpush_back(const_Ty&_X){insert(end(),_X);}//...voidinsert(iterator_P,size_type_M,const_Ty&_X){//////////////////////////////////////////////////////////////iterator_S=allocator.allocate(_N,(void*)0);iterator_Q=_Ucopy(_First,_P,_S

C++:函数包装器是否与内联一起工作?

如果您在编译器中启用了完全优化并设置了如下类:classA{voidDo_A_Stuff();};classB{Aa;voidDo_B_Stuff(){a.Do_A_Stuff();}};classC{Bb;voidDo_C_Stuff(){b.Do_B_Stuff();}};classD{Cc;voidDo_D_Stuff(){c.Do_C_Stuff();}};是否存在调用Do_D_Stuff()比直接调用Do_A_Stuff()慢的情况?此外,这是否需要在每个包装器“链”上使用inline关键字,或者,由于这只是一个建议,编译器是否可以决定在没有关键字的情况下对其进行优化?我知道

c++ - 从非常大的文件中解析每四行的最有效方法

我有以下格式的文件:1:some_basic_info_in_this_line2:LOTS_OF_INFO_IN_THIS_LINE_HUNDREDS_OF_CHARS3:some_basic_info_in_this_line4:LOTS_OF_INFO_IN_THIS_LINE_HUNDREDS_OF_CHARS...该格式自身重复数万次,使文件高达50GiB+。我需要一种有效的方法来处理这种格式的唯一第2行。我愿意使用C、C++11STL或boost。我已经查看了有关SO上文件流的各种其他问题,但我觉得我的情况很独特,因为文件很大,而且每四行中只需要一行。从我读过的内容来看,内

c++ - Cachegrind:为什么有这么多缓存未命中?

我目前正在学习Linux下的各种分析和性能实用程序,尤其是valgrind/cachegrind。我有以下玩具程序:#include#includeintmain(){constunsignedintCOUNT=1000000;std::vectorv;for(inti=0;i用g++-O2-gmain.cpp编译这个程序并运行valgrind--tool=cachegrind./a.out,然后cg_annotatecachegrind。out.31694--auto=yes产生以下结果:------------------------------------------------

c++ - 为什么 list::push_back 在 VC++ 中比在 g++ 中慢得多?

此代码在我的VS2012中大约需要20秒,但在G++中仅需1.x秒。均在win8x64中并使用默认选项编译。listitems;for(inti=0;i是关于内存分配的吗?在我的机器上用VC++输出后释放内存需要3~5秒,而在我friend的(win7x64)上甚至超过1分钟。 最佳答案 嗯...我扩展了您的代码以包含计时:#include#include#include#includeintmain(){std::listitems;clock_tstart=clock();for(inti=0;i我用VC++编译使用:cl/O2

C++ signed 和 unsigned int 与 long long 速度

今天,我注意到几个简单的按位和算术运算的速度在int之间有显着差异。,unsigned,longlong和unsignedlonglong在我的64位电脑上。特别是,对于unsigned,以下循环的速度大约是其两倍至于longlong,这是我没想到的。intk=15;intN=30;intmask=(1(完整代码here)以下是计时(以秒为单位)(对于g++-O、-O2和-O3):1.834207723(int)3.054731598(longlong)1.584846237(unsigned)2.201142018(unsignedlonglong)这些时间非常一致(即1%的差值)。

c++ - 在 C++ 中处理大量的执行时间分析

我目前在做一个涉及海量数据和复杂算法的科学计算项目,所以我需要做大量的代码分析。我目前依赖和clock_t为我的代码的执行计时。我对这个解决方案非常满意……除了我基本上是在为所有事情计时,因此对于每一行实际代码我都必须调用start_time_function123=clock(),end_time_function123=clock()和cout.这会导致严重的代码膨胀,并很快使我的代码变得不可读。你会如何处理?我能想到的唯一解决方案是找到一个IDE,允许我标记我的部分代码(在不同的位置,甚至在不同的文件中)并通过一个按钮切换隐藏/显示所有标记的代码。这将允许我在大部分时间隐藏与分析

c++ - 在 C/C++ 中的特定地址边界上对齐内存是否仍能提高 x86 性能?

许多低延迟开发指南讨论了在特定地址边界上对齐内存分配:https://github.com/real-logic/simple-binary-encoding/wiki/Design-Principles#word-aligned-accesshttp://www.alexonlinux.com/aligned-vs-unaligned-memory-access但是,第二个链接是2008年的。在地址边界上对齐内存是否仍然在2019年为IntelCPU提供性能提升?我认为英特尔CPU不再会因访问未对齐的地址而导致延迟损失?如果不是,在什么情况下应该这样做?我应该对齐每个堆栈变量吗?类成

c++ - 在 C++ 中抓取递归 ntfs 目录的最快方法

我写了一个小型爬虫来扫描和求助目录结构。它基于dirent(它是FindNextFileA的一个小包装)在我的第一个基准测试中,它出奇地慢:4500个文件大约需要123473毫秒(thinkpadt60p本地三星320GB2.5"HD)。在123473毫秒内找到121481个文件这个速度正常吗?这是我的代码:inttestPrintDir(std::stringstrDir,std::stringstrPattern="*",boolrecurse=true){structdirent*ent;DIR*dir;dir=opendir(strDir.c_str());intretVal=

c++ - x64 free 性能低下

我有一个这样的类(假设所有malloc都成功)classCMyClass{public:CMyClass(){lpData=malloc(128);};~CMyClass(){free(lpData);};public:LPVOIDlpData;};然后我执行这个:CMyClass*lpList=newCMyClass[32768];delete[]lpList;问题在于,在x86中,代码运行良好且快速(在调试和发布版本中完成几毫秒),但在x64中,删除调用需要大约15秒来释放所有内存。操作系统是Win7x64。将不胜感激。问候,毛罗。 最佳答案