请注意,这与从已编译的可执行文件中获取编译器选项不同吗 ?我确实详细地经历过。
虽然-frecord-gcc-switches很棒,但它只捕获命令行参数。
例如,我对捕获-O2通常在命令行中传递的内容不感兴趣。-fauto-inc-dec我更好奇的是记录所有由 启用的标志-O2。
(与上面的链接相反,请注意,我可以访问源代码、编译器和构建基础设施。我只想在编译期间捕获标志。对任何特定的 gcc 版本不挑剔)
我一直在为嵌入式环境开发一个简单的框架。我决定要使用虚拟调用,CRTP还是使用switch语句。有人告诉我vtables在嵌入式中的性能很差。
从这个问题开始,
vvable性能下降vs. switch语句,
我决定运行自己的测试。我用三种不同的方法来调用成员函数。
我从来没有尝试过使用基本的CRTP模式,但是etl :: function应该是该模式所使用的机制的变体。我使用MSVC并在ARM Cortex M4上获得类似性能的时间是
纯虚拟呼叫明显更快。我是想念某些东西还是虚拟通话,不如人们所说的那么糟糕。这是用于测试的代码。
class testetlFunc
{
public:
uint32_t a;
testetlFunc() { a = 0; };
void foo();
};
class testetlFunc2
{
public:
uint32_t a;
testetlFunc2() { a = 0; };
virtual void foo() = 0;
};
void testetlFunc::foo()
{
a++;
}
class testetlFuncDerived : public testetlFunc2
{
public:
testetlFuncDerived();
void foo() override;
};
testetlFuncDerived::testetlFuncDerived()
{
}
void testetlFuncDerived::foo()
{
a++;
}
etl::ifunction<void>* timer1_callback1; …Run Code Online (Sandbox Code Playgroud)