草庐IT

局部剪枝

全部标签

c++ - 静态局部变量可以减少内存分配时间吗?

假设我在一个看起来像这样的单线程程序中有一个函数voidf(somearguments){charbuffer[32];someoperationsonbuffer;}并且f出现在一些经常被调用的循环中,所以我想让它尽可能快。在我看来,每次调用f时都需要分配缓冲区,但如果我将其声明为静态,则不会发生这种情况。这是正确的推理吗?是免费加速吗?仅仅因为这个事实(它很容易加速),优化编译器是否已经为我做了类似的事情? 最佳答案 不,这不是免费的加速。首先,分配开始时几乎是自由的(因为它只包括向堆栈指针添加32),其次,静态变量可能更慢至少

c++ - 每个线程的局部静态变量

假设我有一个类,它在初始化后创建一个线程并在其中运行一个方法,其中声明了一个静态变量:voidmethod(){staticintvar=0;var++;}如果我创建更多类的对象,例如3个,那么该方法将在3个不同的线程中被调用3次。之后var将等于3。如何完成功能,每个线程都有自己的静态var独立于其他线程。我将不胜感激。 最佳答案 您可以使用thread_local关键字来指示对象具有线程存储持续时间。你可以这样使用它:staticthread_localintV;如果您想了解更多关于存储类说明符的信息,可以查看CppRefere

c++ - Bullet Physics - 在 body 的局部空间中应用扭矩脉冲

我目前正在评估BulletPhysicsLibrary对于我正在使用C++和Ogre3D编写的3D太空游戏.通过从btMotionState派生并插入我的SceneNodes,我已经很好地集成了Ogre3D和Bullet,但是现在我在计算应该传递给btRigidBody::applyCentralImpulse和btRigidBody::applyTorqueImpulse方法以实现的值时遇到了很多麻烦我正在寻找的结果。当我按下键盘上的LEFT或RIGHT键时,我希望飞船在本地Z轴上滚动。当我按下UP或DOWN时,我希望它在本地X轴上倾斜。当我按下A或Z时,我希望它在局部Z轴的方向上加

c++ - 如果我通过引用捕获局部变量并且超出范围会怎样?

假设我使用lambda作为回调函数,并且在创建lambda时,我通过引用捕获了一个局部函数变量。现在假设lambda对象直到该局部函数变量超出范围后才被执行。会发生什么?我意识到,如果有可能发生这种情况,那么某人这样做是非常愚蠢的,但我几乎肯定有人最终会这样做。 最佳答案 是的,那将是一个悬空引用。听起来你很担心界面设计:“我几乎肯定有人最终会这样做。”请不要在此基础上拒绝lambda和std::function,因为它们并不比任何其他替代方案更危险。Lambda只是定义局部仿函数的一种更简单的方法。std::function是持久

c++ - 函数局部静态 const 对象的线程安全初始化

Thisquestion让我质疑我多年来一直遵循的做法。对于函数局部静态常量对象的线程安全初始化,我保护对象的实际构造,但不保护函数局部的初始化引用指它。像这样的:namespace{constsome_type&create_const_thingy(){lockmy_lock(some_mutex);staticconstsome_typethe_const_thingy;returnthe_const_thingy;}}voiduse_const_thingy(){staticconstsome_type&the_const_thingy=create_const_thingy(

c++ - 多线程环境中的静态局部变量初始化

假设有一个函数(可能是成员函数)SomeTypefoo(){staticSomeTypevar=generateVar();returnvar;}如果foo将被多个线程同时“首次”调用,var将如何初始化?是否保证generateVar()在任何情况下都只会被调用一次(当然如果使用的话)?是否保证foo在任何场景下多次调用都会返回相同的值?原始类型和非原始类型的行为有区别吗? 最佳答案 关于C++03:C++03标准定义的抽象机不包含关于什么是线程的正式定义,以及如果同时访问一个对象,程序的结果应该是什么。没有同步原语、在不同线程中

c++ - 我们可以在 constexpr 函数中省略局部变量的 const 吗?

例如:constexprintg(){return30;}constexprintf(){//Canweomitconst?constintx=g();constinty=10;returnx+y;}是否有任何一点用const在constexpr函数中声明局部变量?具有const局部变量的constexpr函数是否与没有const的函数等效?换句话说,constexpr是否对函数强加(暗示)const对其局部变量? 最佳答案 在非constexpr函数中将变量声明为const的相同参数也适用于constexpr函数:声明一个变量co

c++ - 具有局部变量初始化延迟的 constexpr 函数

我正在尝试编写一个constexpr形式的函数:constexprintfoo(boolcond){inta,b,c;if(cond){a=1;b=2;c=3;}else{a=-1;b=-2;c=-3;}returna+b+c;}然而,编译器提示我使用了未初始化的变量,尽管局部变量的最终初始化是有保证的。我可以重写函数以使用三元运算符,即inta=cond?1:-1;等,但我不想这样做。有没有办法让编译器相信局部变量会被初始化? 最佳答案 However,thecompilercomplainsthatIamusinganunini

c++ - 关于 C++ 中的局部和全局静态变量

C++入门说Eachlocalstaticvariableisinitializedbeforethefirsttimeexecutionpassesthroughtheobject'sdefinition.Localstaticsarenotdestroyedwhenafunctionends;theyaredestroyedwhenprogramterminates.局部静态变量与全局静态变量有什么不同吗?除了声明它们的位置之外,还有什么不同?voidfoo(){staticintx=0;++x;cout比较staticintx=0;voidfoo(){++x;cout

c++ - 您可以在类或结构中使用线程局部变量吗

像这样。structsome_struct{//Otherfields.....__threadinttl;}我正在尝试这样做,但编译器给了我这个错误。./cv.h:16:2:error:'__thread'isonlyallowedonvariabledeclarations__threadinttl; 最佳答案 在C和C++中,线程局部存储仅适用于静态变量或具有外部链接的变量。本地(自动)变量通常在堆栈上创建,因此特定于执行代码的线程,但全局和静态变量在所有线程之间共享,因为它们驻留在数据或BSS段中。TLS提供了一种机制来使这