Преимущества глобальных переменных перед статическими членами класса?

Во встроенной системе мы часто используем глобальные переменные, чтобы поддерживать низкое потребление динамической памяти в куче и стеке. Но глобальные переменные также считаются плохой практикой программирования, если они не используются в глобальном смысле, то есть используются только внутри одной или двух функций .

Поэтому я действительно хочу использовать возможности, чтобы защитить свой код от самого себя. Конечно, механизм создания экземпляров С++ должен избегать встроенных систем с низкими ресурсами, таких как arduino. Поэтому я пишу классы только со статическими членами (и функциями-членами). Многие из библиотек, поставляемых с ардуино, похоже, тоже работают таким образом.

Мне любопытно, есть ли какой-либо недостаток в перемещении статических переменных или даже константных массивов (предназначенных для хранения в программной памяти) из глобального пространства имен в пространство имен класса и превращении их в частные?

Меня в первую очередь интересуют недостатки, связанные с комбинацией ООП с платформой arduino (с использованием arduino uno) с avr-gcc.

, 👍6


1 ответ


Лучший ответ:

3

Я не вижу особых недостатков в использовании статических членов класса вместо глобальных переменных в Arduino. В конечной программе они будут управляться так же.

Единственная разница, которую я вижу, может возникнуть в зависимости от того, как вы проектируете свои классы (если дизайн правильный, то особых проблем не возникнет):

Предположим, вы декалируете класс A:

class A {
    public:
    void f();
    void g();
    ...
    static void z();

    private:
    static int myStaticField;
    ...
};

если вам нужен экземпляр A для метода f(), которому не нужен myStaticField, то это поле все равно существует в вашем SRAM-пространство.

Но это крайний случай, так как в хорошем OOD myStaticField должен понадобиться, как только вам понадобится работать с классом A (какой бы метод вы ни использовали).

,

Но если я создам экземпляры A, myStaticField будет зарезервирован в ОЗУ (или где-то еще) только один раз, не так ли?, @Ariser

Да, конечно, в этом разница между статическими и нестатическими элементами., @jfpoilpret