草庐IT

c++ - 为什么堆上的分配比栈上的分配快?

据我对资源管理的了解,在堆上分配东西(操作符new)应该总是比在堆栈上分配(自动存储)慢,因为堆栈是LIFO-基于结构,因此它需要最少的簿记,并且要分配的下一个地址的指针是微不足道的。到目前为止,一切都很好。现在看下面的代码:/*...includes...*/usingstd::cout;usingstd::cin;usingstd::endl;intbar(){return42;}intmain(){autos1=std::chrono::steady_clock::now();std::packaged_taskpt1(bar);autoe1=std::chrono::stead

c++ - 什么时候删除模板实例比删除非模板重载更可取?

假设我有一个使用原始指针的模板:templatevoidprocessPointer(T*ptr);我不希望使用void*指针调用它。看来我有两个选择。我可以删除非模板重载:voidprocessPointer(void*)=delete;或者我可以删除一个模板实例化:templatevoidprocessPointer(void*)=delete;声明非模板重载更容易(不用尖括号)。有什么理由让我更喜欢删除模板实例化吗? 最佳答案 Here'sonereason支持模板版本:processPointer(void*)仍然可以直接调

c++ - 为什么这个 Ruby 代码比等效的 C++ 代码快得多?

最近我一直在处理一些简单的项目Euler问题并用Ruby和C++解决它们。但是对于Problem14关于Collat​​z猜想,我的C++代码运行了大约半小时,然后我终止了它,但是当我将代码翻译成Ruby时,它在9秒内就解决了。这种差异让我难以置信-我一直被认为C++几乎总是比Ruby快,尤其是在数学处理方面。我的代码如下。C++:#includeusingnamespacestd;intmain(){inta=2;intb=2;intc=0;while(bc){cout运行时间-老实说,我不知道,但这真的很长。和鲁比:#!/usr/bin/ruby-wa=0b=2c=0whilebc

c++ - if/else 在什么阶段变得比 switch case 更好?可以?

我可以总结一下,Switchcase由实现定义,但主要定义为跳转表切换大小写使代码更具可读性Switch比if/elseif(?)快考虑一个我有300+个switch案例的案例。我知道这个场景中的if/elseif会一团糟。但我想知道switch案例在这样的场景?它是否可扩展,即无论存在多少情况,它仍然比if/else相对快?既然是执行定义了我如何弄清楚我的编译器是如何实现它的?最重要的是,除了实际编写代码和使用分析器之外,我该如何进行if/elseif-switch比较?我尝试使用gcc4.8.1-S开关编译一个带有switchcase的小型.c文件,它看起来像是创建了一个跳转表.我

C++ 将字符串转换为 int 的最有效方法(比 atoi 更快)

正如标题中提到的,我正在寻找比atoi更能提供性能的东西。目前,我知道最快的方法是atoi(mystring.c_str())最后,我更喜欢不依赖Boost的解决方案。有没有人有很好的性能技巧来做到这一点?附加信息:int不会超过20亿,总是正数,字符串中没有小数位。 最佳答案 我尝试了使用查找表的解决方案,但发现它们充满了问题,而且实际上速度不是很快。结果证明,最快的解决方案是最没有想象力的:intfast_atoi(constchar*str){intval=0;while(*str){val=val*10+(*str++-'0

c++ - 有没有比 lex/flex 更好(更现代)的工具来为 C++ 生成标记器?

我最近将源文件解析添加到现有工具中,该工具从复杂的命令行参数生成输出文件。命令行参数变得如此复杂,以至于我们开始允许将它们作为一个文件提供,该文件被解析为就好像它是一个非常大的命令行一样,但语法仍然很笨拙。所以我添加了使用更合理的语法解析源文件的能力。我使用flex2.5.4forwindows来为这种自定义源文件格式生成标记器,并且它工作正常。但我讨厌代码。全局变量、奇怪的命名约定以及它生成的c++代码非常糟糕。现有的代码生成后端粘在flex的输出上——我不使用yacc或bison。我即将深入研究该代码,我想使用更好/更现代的工具。有人知道吗?在Windows命令提示符下运行(Vis

c++ - move 分配比复制分配慢——错误、功能或未指定?

我最近意识到,在C++11(或者至少是我的实现,VisualC++)中添加move语义已经积极(并且相当戏剧性地)破坏了我的优化之一。考虑以下代码:#includeintmain(){typedefstd::vector>LookupTable;LookupTablevalues(100);//makeanewtablevalues[0].push_back(1);//populatesomeentries//Nowclearthetablebutkeepitsbuffersallocatedforlaterusevalues=LookupTable(values.size());re

java - 在 HTTP 模式下,node.js 是否比 Java 具有实质性的性能优势?

我刚刚开始在node.js中编写代码一段时间。现在这是我的一个问题:在HTTP应用程序中,给定请求-响应模型,单个应用程序线程被阻塞,直到所有后端任务完成并将响应返回给客户端,所以性能提升似乎仅限于微调后端,比如并行化IO请求。(嗯,当涉及到许多重和独立IO操作时,这种改进很重要,但通常情况还意味着通过重新设计数据结构,您可以消除大量的IO请求,并可能最终获得比仅发出并行操作更好的性能。)如果真是这样,它怎么能比那些基于Java(或PHP、python等)的框架产生更好的性能呢?我还引用了一篇文章Understandingthenode.jseventloop,这也解释了这种情况:It

json - 为什么在 node.js 中 JSON 比 BSON 快?

看完this,有一句话很突出:BSONisalsodesignedtobefasttoencodeanddecode.Forexample,integersarestoredas32(or64)bitintegers,sotheydon'tneedtobeparsedtoandfromtext.ThisusesmorespacethanJSONforsmallintegers,butismuchfastertoparse.根据我的阅读,使用BSON的全部意义在于它对CPU的负担更少,编码/处理速度更快。但是,我使用Node.js进行了一些测试,并使用原生JSON方法来打击BSON出水。

javascript - Node js,为什么50ms的setTimeout比setTimeout 0快

我已经是Node.js开发人员一年了。昨晚我想我会在express和http模块之间做一个基准测试,基本上它是一个简单的promise,它返回一个字符串并将它传递给响应,现在我看到http更快,但我遇到了一个不同的问题,如果我在ab测试中将setTimeout设置为50ms,并发500和100000个请求,响应时间比setTimeout0或process快两倍.nextTick。现在我知道setTimeout将它带到下一个周期,但在队列的末尾,nextTick将它放在下一个周期的首位,但我真的不理解为什么setTimeout50ms比setTimeout0快。即使没有setTimeou