草庐IT

c++ - 显式默认的复制 ctor 生成比手写等效代码更好的代码

我发现生成的代码有所不同,这取决于我是显式默认复制构造函数还是手写相同的东西。这是一个简单的类,只包含一个int并在其上定义了一些算术运算符。clang和g++都以类似的方式处理这种情况,所以这让我想知道这是否有潜在的语言要求,如果有,它在做什么?如果可能的话,在标准中寻找引文。:)为了展示这一点,我以两种方式编写了average()函数,对原始ints和Holders进行操作。我希望两者生成相同的代码。这是输出:显式默认的复制构造函数:average(Holder,Holder):addesi,edimoveax,esishreax,31addeax,esisareaxretaver

c++ - MOD 运算是否比乘法更占用 CPU?

为什么mod(%)运算比乘法(*)的成本要高出2倍?请详细说明CPU如何进行除法运算并返回MOD运算的结果。在以下示例中,每个线程运行一秒钟。测试是在SPARC处理器上执行的。//multiplicationvoidsomeThread(){inta=10234;while(true){opers++;a=a*a;a++;}//opers~26*10^6inasec.}//MODvoidsomeThread(){inta=10234;while(true){opers++;a=a%10000007;a++;}//opers~12*10^6inasec.} 最

c++ - Lua 比 C/C++ 更适合的示例用法

关闭。这个问题需要更多focused.它目前不接受答案。想要改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭5年前。Improvethisquestion我目前正在嵌入Lua并将其用作美化的智能配置文件。但是,我认为我错过了一些东西,因为人们对Lua的使用赞不绝口。例如,我可以通过展示这个示例轻松解释为什么您可以使用shell脚本而不是C(诚然,boostregexp是多余的):#include#include#includeintmain(intargc,char*argv[]){DIR*d;structdirent*dir;boost::regexr

c++ - 为什么我的 C++ 磁盘写入测试比使用 bash 的简单文件复制慢得多?

使用下面的程序,我尝试测试使用std::ofstream写入磁盘的速度。我在编写1GiB文件时达到了大约300MiB/s。但是,使用cp命令进行简单的文件复制至少快两倍。我的程序是否达到了硬件限制或可以更快?#include#include#includecharpayload[1000*1000];//1MBvoidtest(intMB){//Configurebuffercharbuffer[32*1000];std::ofstreamof("test.file");of.rdbuf()->pubsetbuf(buffer,sizeof(buffer));autostart_tim

c++ - 小于比。等于效率 C/C++

当我使用较旧的API时,例如Unix上的C套接字API,我总是注意到人们在比较错误的返回值时更喜欢小于()而不是等于(==).intresult=send(...);if(result在我所指的情况下,返回码只会是正数,0,或-1(errno设置为正确的值)。那么为什么不直接使用(result==-1)来检查错误呢?而不是(result?我问是因为我想知道这是出于习惯还是使用less-than是否更有效?我在想如果你比较两个uint64_ts并且您发现了MSB中的差异,您不必检查其他7个字节等。不过,我可能会达到这个逻辑! 最佳答案

c++ - 使用 bool 值 vector 是否比动态位集慢?

使用bool值vector是否比动态位集慢?我刚刚听说了boost的动态位集,我想知道它是否值得麻烦。我可以只使用bool值vector吗? 最佳答案 这很大程度上取决于您使用的bool值的数量。bitset和vector通常都使用打包表示,其中bool值仅存储为单个位。一方面,这会以位操作的形式施加一些开销来访问单个值。另一方面,这也意味着更多bool值将适合您的缓存。如果您使用大量bool值(例如,实现埃拉托色尼筛),将更多的bool值放入缓存中几乎总能获得净yield。内存使用量的减少将比位操作损失更多。反对std::vect

c++ - 为什么 `boost::any` 比 `void*` 好?

boost::any和boost::any_cast与使用void*和dynamic_cast相比有哪些内在优势>? 最佳答案 优点是boost::any比void*更安全。例如inti=5;void*p=&i;static_cast(p);//Compilerdoesn'tcomplain.UndefinedBehavior.boost::anya;a=i;boost::any_cast(a);//throws,whichisgood至于您的评论,您不能从void*中dynamic_cast。您可以dynamic_cast仅从具有

c++ - std::vector 的 std::lower_bound 比 std::map::find 慢

我编写了一个类来充当顺序容器(std::vector/std::queue/std::list)的包装器,以具有std::map的接口(interface),用于使用少量小对象时的性能。考虑到已经存在的算法,编码非常简单。这段代码显然是高度从我的完整代码中删减的,但显示了问题。template,classundertype_=std::vector>>classassociative{public:typedeftraits_key_compare;typedefkey_key_type;typedefmapped_mapped_type;typedefstd::pairvalue_t

C++ 比写入文本文件的 Bash 脚本快得多

我想测试在bash脚本和C++程序中写入文件的性能。这是bash脚本:#!/bin/bashwhiletrue;doecho"something">>bash.txtdone这为文本文件每秒增加了大约2-3KB。这是C++代码:#include#includeusingnamespacestd;intmain(){ofstreammyfile;myfile.open("cpp.txt");while(true){myfile这在不到10秒的时间内创建了一个约6GB的文本文件。是什么让这个C++代码这么快,和/或这个bash脚本这么慢? 最佳答案

c++ - 为什么 std::async 比简单的分离线程慢?

我已经多次被告知,我应该使用std::async来执行带有std::launch::async参数的任务类型(所以它在一个新的执行线程上是很神奇的)。在这些陈述的鼓舞下,我想看看std::async与:顺序执行一个简单的分离std::thread我的简单异步“实现”我天真的异步实现如下所示:templateautomyAsync(F&&f,Args&&...args)->std::future{std::packaged_tasktask(std::bind(std::forward(f),std::forward(args)...));autofuture=task.get_futu