草庐IT

PERFORMANCE

全部标签

c++ - 如何在 C++ 中的 2 个函数集之间切换?

有没有办法,我可以有效地在2个相似的函数集(C/C++)之间切换?为了更好地解释我的意思,假设我有两组全局函数,例如:voida_someCoolFunction();voida_anotherCoolFunction(intwithParameters);…voidb_someCoolFunction();voidb_anotherCoolFunction(intwithParameters);…而且我希望能够在运行时在我的程序中“切换”使用哪个。但是:我不想在每个函数中都有一个if条件,例如:voidinlinesomeCoolFunction(){if(someState=A_S

c++ - 编译器是否优化对常量变量的引用?

当谈到C和C++语言时,编译器是否优化了对常量变量的引用,以便程序自动知道所引用的值是什么,而不必查看常量变量的内存位置?说到数组,是否取决于数组中指向的索引值在编译时是否为常量?例如,看一下这段代码:intmain(void){1:chartesst[3]={'1','3','7'};2:charerm=tesst[1];}编译器是否在编译时将第2行“更改”为“charerm='3'”? 最佳答案 我个人希望发布的代码变成“无”,因为两个变量都没有实际使用,因此可以删除。但是,是的,现代编译器(gcc、clang、msvc等)应该

c++ - 在 C++ 中初始化数组

我看到的每个地方都有人大声争论未初始化的变量是不好的,我当然同意并理解为什么——但是;我的问题是,是否存在您不想这样做的情况?例如取代码:chararrBuffer[1024]={'\0'};将整个数组设为NULL是否会对性能产生影响,而不是使用数组而不初始化它? 最佳答案 我假定堆栈初始化,因为静态数组是自动初始化的。G++输出charwhatever[2567]={'\0'};8048530:8d95f5f5fffflea-0xa0b(%ebp),%edx8048536:b8070a0000mov$0xa07,%eax80485

c++ - Foreach 范围迭代 vector<int> - auto 或 auto&?

游戏引擎微优化情况:我正在使用C++11范围for循环迭代vector,与auto关键字。什么更快:for(autovalue:ints)...或for(auto&value:ints)...? 最佳答案 在关心哪个更快之前,你应该关心哪个在语义上是正确的。如果你不需要改变被迭代的元素,你应该选择第一个版本。否则,您应该选择第二个版本。当然,您可能会反对,即使您不需要更改vector的内容,仍然可以选择使用对const的引用:for(autoconst&value:ints)然后问题就变成了:哪个更快?通过引用const还是通过值?

C++:返回 C 字符串的最快方法

我有一个简单的函数,它接受一个字符并返回一个字符串,在C中它看起来像;char*get_string(charc){switch(c){case'A':return"somestring";Case'B':return"someotherstring";...它工作正常,但后来我希望我的代码在C++中工作,而C++编译器抛出大量“不推荐使用的从字符串常量到‘char*’的转换”。我理解这个警告,但我不是100%确定什么是实现该函数的最佳方法,以便它可以在C和C++上快速运行。这个函数被调用了很多,这是一个重要的瓶颈,所以它必须要快。我最好的尝试是;char*get_string(cha

c++ - 是否应该敏锐而有意识地尝试尽可能长时间地推迟变量定义?

在他的书EffectiveC++ScottMeyers中提出了一个有趣的指南,项目26:尽可能推迟变量定义。它提高了程序的清晰度并提高了程序效率。他提出的支持上述论点的论点是,无论何时创建或销毁变量,我们都会为变量的构造和销毁产生一些成本。我们可能有多个控制流,其中我们可能从函数返回而不使用早期(在函数开头)定义的变量,因此可能不必要地产生创建未使用变量的成本。这一切似乎都是合乎逻辑的,而且确实是一个很好的做法。来自c背景的我倾向于在功能block的开头声明我的所有变量。也许这仅仅是c的背景,但我也觉得将所有声明放在一个函数的一个位置提供了简单和更好的可读性。所以问题是你们中有多少人在

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

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

c++ - 为了性能,我应该更喜欢数组而不是 vector 吗?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:std::vectorissomuchslowerthanplainarrays?看起来vector是分配在堆上而不是堆栈上。那么,当性能成为一个严重问题时,我是否应该考虑使用数组来代替vector(如果可能)?

c++ - 过度使用宏会影响性能吗?

我有一个很长的代码,它被调用了数百万次,我注意到,如果我将所有宏更改为内联函数,代码运行速度会快很多。你能解释一下这是为什么吗?宏不只是文本替换吗?与可以调用函数的内联函数相反? 最佳答案 宏是一种文本替换,因此通常会生成更多可执行代码。每次调用宏时,都会插入代码(好吧,不一定,宏可以为空......但原则上)。另一方面,内联函数可能与宏的工作方式相同,但它们也可能根本不是内联的。一般来说,inline关键字是一个较弱的暗示,而不是一个要求,编译器现在会根据启发式方法明智地内联函数(或将放弃这样做),主要是伪代码的数量指示。因此,内

C++ weak_ptr创建性能

我已经读到创建或复制std::shared_ptr会涉及一些开销(引用计数器的原子增量等)。但是如何从中创建std::weak_ptr呢?Obj*obj=newObj();//fastObj*o=obj;//slowstd::shared_ptra(o);//slowstd::shared_ptrb(a);//slow?std::weak_ptrc(b);我希望能够获得更快的性能,但是我知道共享指针仍然必须增加弱引用计数器。那么,这仍然像将shared_ptr复制到另一个一样慢吗? 最佳答案 除了Alec's非常有趣的描述他以前的项