草庐IT

c++ - 将正则表达式编译成 native 程序集会比 PCRE 或其他正则表达式引擎更快吗?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我在考虑改进。我目前正在对日志文件进行大量文本处理。我并不是说PCRE是慢/快或与此相关的任何其他实现。我编写的语言主要是Perl。我知道它有一个强大的正则表达式引擎,我知道它比PCRE更具表现力。我想用C++制作一个小型正则表达式引擎,将正则表达式编译为原始nasm。我知道PCRE非常复杂,我的假设是我可以跳过PCRE在不必要的处理方面所做的很多事情。而

c++ - 比 C++ 中的异常处理更好的语言特性?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭9年前。Improvethisquestion(不确定它是否只是一个C++的东西)异常处理ishardtolearninC++andiscertainlynotaperfectsolutionbutinmostcases(otherthansomespecificembeddedsoftwarecontexts)it'scertainlythebettersolutionwecurrentlyhaveforexceptionhandl

c++ - map 什么时候变得比两个 vector 更好?

map对其所有元素进行二分搜索,这具有对数复杂度——这意味着对于足够小的对象集合,map的性能将低于具有线性搜索的两个vector。对象(键)池应该有多大才能使映射的性能开始优于两个vector?编辑:问题的更一般化版本:对象池应该有多大才能使二分搜索的性能优于线性搜索?我使用字符串作为键,值是指针,但我的特定用例可能无关紧要。我比较想了解如何正确使用这两个工具。 最佳答案 如果你能原谅我这么说的话,大多数答案对我来说就像是在用各种方式说:“我不知道”,而不是真的承认他们不知道。虽然我大体上同意他们给出的建议,但他们似乎都没有尝试直

c++ - new[] 比 Win32 的 VirtualAlloc 快吗?

我正在测试一些字符串池分配器的性能:我考虑了提供的那个here调用VirtualAlloc然后分割出子分配,以及使用标准C++(不直接调用任何Win32API)和new[]的类似实现。我希望VirtualAlloc版本更快,因为我认为开销应该比C++new[]少;但我观察到的结果恰恰相反:使用new[]似乎比使用较低级别的VirtualAlloc产生更快的代码。我跑了几次测试(代码是用VS2010SP1编译的),输出是这样的:StringpoolusingVirtualAlloc:1280.07msStringpoolusingnew[]:799.193ms这是为什么?为什么new[]

c++ - 为什么发布版本 memset 比 visual studio 2012 中的调试版本慢?

为什么在visualstudio2012中发布版本的memset比调试版本慢?在visualsutido2010中,也是这个结果。我的电脑:英特尔酷睿i7-37703.40GHz8G内存操作系统:Windows7SP164位这是我的测试代码:#includeintmain(){constintSize=1000*1024*1024;char*Data=(char*)malloc(Size);#ifdef_DEBUGprintf_s("debug\n");#elseprintf_s("release\n");#endifboost::progress_timertimer;memset(

c++ - IBO 比 GL_TRIANGLE_STRIP 还差?

出于学习目的,我决定使用3种方法绘制球体显示列表VoaVbo(GL_TRIANGLE_STRIPE)VaoVbo和Ibo(GL_TRIANGLES)我听说使用ibo可以使程序运行得更快,但这是真的吗?对于100个切片和100个堆栈的球体,第二种方法产生40400个顶点,而第三种方法“仅”产生19802个顶点。通过这样做,我保存了20598个顶点,每个32字节=659136字节。verticesSize=(slices*4)*(stacks+1);IBOverticesSize=(slices*2)*(stacks-1)+2;但是我需要制作索引数组,在这种情况下大小为118800(创建所

c++ - Clang 是否比跨平台的 GCC 更具确定性?

我正在考虑用C++编写多用户RTS游戏(部分)的可行性。我很快发现,一个硬性要求是游戏模拟必须完全确定服务器和所有客户端的最后一点,以便能够将网络通信限制为用户输入,而不是游戏状态本身.由于每个人都有不同的计算机,这似乎是一个难题。那么,是否有一些“神奇”的方法可以让C++编译器创建一个在Linux(服务器)、Windows和Mac上完全确定的可执行文件?我认为两个主要的OSSC++编译器是GCC和Clang,所以我想知道在这方面是否一个比另一个表现更好。我也会对任何可用于验证C++确定性的测试套件感兴趣。[编辑]所谓确定性,我的意思是编译后的程序,给定相同的初始状态,并以相同的顺序输

c++ - Boost.Phoenix 是否天生就比等效的 C++11 lambda 慢(它是否使用虚拟调用、 'volatile' 用法等)?

我一直认为Boost.Phoenix使用类型推断来静态推断所有内容,直到我尝试了这段代码:#include#includeusingnamespaceboost::phoenix;usingnamespaceboost::phoenix::placeholders;structFoo{intx;};intmain(){std::vectorbar;bind(&Foo::x,ref(bar)[_1])("invalidindex");//oopsreturn0;}并得到警告:warningC4239:nonstandardextensionused:'argument':conversi

c++ - 为什么 ifstream::read 比使用迭代器快得多?

事实上,有很多方法可以将文件读入字符串。两个常见的是使用ifstream::read直接读取字符串,以及使用steambuf_iterators和std::copy_n:使用ifstream::read:std::ifstreamin{"./filename.txt"};std::stringcontents;in.seekg(0,in.end);contents.resize(in.tellg());in.seekg(0,in.beg);in.read(&contents[0],contents.size());使用std::copy_n:std::ifstreamin{"./fil

C++ - Kazushige Goto 论文中的优化矩阵乘法在 O3 标志中的表现比 naive 差

相关论文是here.我正在尝试重现KazushigeGoto关于快速矩阵乘法的开创性论文,方法是将其衰减为gepp(通用面板-面板)和gebp(通用block-面板)乘法的子例程,这显然是gemm最快的构建block。我编写了下面的代码来测试它并使用-O3标志,我发现我的代码的性能实际上更差比朴素的矩阵乘法:(~0.5xincrease)Timeelapsed:3.82941但是,如果没有-O3标志,我们看到速度确实比原始版本快:(~4xincrease)Timeelapsed:53.4537根据@ztik的建议,我在没有使用-mavx2-O3标志的情况下进行了尝试,并添加了-O2,它