c ++如何内联私有类字段?

时间:2017-05-14 14:52:49

标签: c++ performance oop c++14 c++17

目前我正在为微控制器编写一个库。大多数微控制器都有更多的闪存然后RAM。我的问题不是硬件或微控制器相关,重要的是我可以减少RAM的使用。我将以一个例子解释我的问题。

MyClass.h

class myClass
{
    public:
        myClass(int _pinA, int _pinB)
        : pinA{_pinA}, pinB{_pinB} {};
        void doSomething(); //for example turnOn(pinB);
    private:
        const int pinA, pinB;
};

的main.cpp

int main()
{
    myClass object(2,3);
    object.doSomething();
    return 0;
}

因此,如果编译器看到turnOn(pinB),它必须用pinB(预处理)的值替换pinB。如果你使用define,你可以实现这一点,但在我的情况下,我无法使用它。

只要对象处于活动状态,pin变量就存储在ram中。是否有可能使编译器每次都粘贴pinA或pinB的值?这样,变量存储在闪存(程序)存储器中。

提前致谢!

1 个答案:

答案 0 :(得分:0)

即使它们是非成员变量,只要给它们const声明,也不要求编译器不给它们存储。这最终要由编译器来处理。编译器甚至可以为constexpr变量提供存储空间。

它们是成员变量的事实使得编译器几乎不可能抛弃它们并且仍然能够遵循C ++内存模型。哦,当然,编译器在某些情况下能够这样做是可能的。但是你无法做到保证它。

但是,您可以鼓励编译器消除存储。一种方法是使myClass成为文字类型,并将包含该对象的变量声明为constexpr。这不会保证;获取对象或其任何子对象的引用或指针很容易导致编译器必须给它内存。但是当它不是绝对必要时,它会使编译器更容易删除对象。