小编Sid*_*Sid的帖子

C++低延迟设计:用于工厂实现的函数调度v/s CRTP

作为系统设计的一部分,我们需要实现工厂模式.结合Factory模式,我们还使用CRTP来提供一组基本功能,然后可以通过Derived类进行自定义.

示例代码如下:

class FactoryInterface{
    public:
     virtual void doX() = 0;
};

//force all derived classes to implement custom_X_impl 
template< typename Derived, typename Base = FactoryInterface>
class CRTP : public Base 
{
    public:
    void doX(){
        // do common processing..... then
        static_cast<Derived*>(this)->custom_X_impl();
    }
};

class Derived: public CRTP<Derived>
{
    public:
        void custom_X_impl(){
        //do custom stuff
        }
};
Run Code Online (Sandbox Code Playgroud)

虽然这种设计很复杂,但它确实提供了一些好处.初始虚函数调用之后的所有调用都可以内联.派生类custom_X_impl调用也是有效的.

我编写了一个比较程序来比较使用函数指针和虚函数的类似实现(紧密循环,重复调用)的行为.这个设计为gcc/4.8与O2和O3取得了胜利.

然而,C++专家昨天告诉我,大型执行程序中的任何虚函数调用都需要一个可变的时间,考虑到缓存未命中,我可以使用C样式函数表查找和gcc函数列表来实现更好的性能.但是我仍然看到上面提到的示例程序的成本的2倍.

我的问题如下:1.大师的断言是真的吗?对于任何一个答案,我可以参考任何链接.2.我是否可以参考任何低延迟实现,有一个基类使用函数指针在派生类中调用自定义函数?3.有关改进设计的建议吗?

任何其他反馈总是受欢迎的.

c++ gcc class-design crtp low-latency

9
推荐指数
1
解决办法
1022
查看次数

__attribute __((packed))在只有1个元素的结构上

我正在浏览一个不再与该公司合作的超级明星开发的遗留代码.通过他的代码,他已经打包了结构.但是我看到他为结构成员做了这个,只有1个元素.我不确定他这样做是否有任何好处.我错过了什么吗?

示例代码:

struct A { 
    uint32_t a __attribute__((packed));
};
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
1
解决办法
62
查看次数

标签 统计

c++ ×2

class-design ×1

crtp ×1

gcc ×1

low-latency ×1