Сейчас я работаю над проектом Atmel AVR и начинаю удивляться, какой из этих двух методов использует меньше памяти. Я работаю 8-битный Atmel Atmega328. У меня есть значение, которое мне нужно передать нескольким внешним функциям (вне класса).
Случай 1: использовать макрос препроцессора:
#define MY_VALUE 0x10
class MyClass
{
public:
MyClass ( );
void myMethod ( );
void myMethod2 ( );
};
// Constructor
void MyClass::myMethod ( )
{
externalFunction ( MY_VALUE );
}
void MyClass::myMethod2 ( )
{
externalFunction2 ( MY_VALUE );
}
Случай 2: Используйте постоянное статическое значение:
class MyClass
{
public:
const static uint8_t MY_VALUE = 0x10;
MyClass ( );
void myMethod ( );
void myMethod2 ( );
};
// Constructor
void MyClass::myMethod ( )
{
externalFunction ( MyClass::MY_VALUE );
}
void MyClass::myMethod2 ( )
{
externalFunction2 ( MyClass::MY_VALUE );
}
Или существуют лучшие методы для восстановления памяти.
Вопрос 2: То же, что закончился, но вместо uint8_t
мы используем uint16_t
или же uint32_t
?
Случай 1: использовать макрос процессора: если память является основной проблемой, я предлагаю пойти на #define или же перечисление
так как Const использует дополнительную память по сравнению с #define или enum.
Других решений пока нет …