0
저는 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 : 사용 CONST 정적 값 :
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);
}
아니면 메모리 사용을 redusing 더 나은 방법이 존재한다.
질문 2 : 이상으로 동일하지만 uint8_t
대신 uint16_t
또는 uint32_t
을 사용 하시겠습니까?
컴파일 된 결과는 컴파일러에 따라 다르지만 이는 학교의 미세 최적화 예제입니다. 예 : 'externalFunction'가'int'를 받아들이면 첫 번째 예제에서'0x10'는'int '(8 비트 컨트롤러에서'sizeof (int) == 2'라고 가정)로 컴파일 될 것이고, 추가 바이트). 프로토 타입이'uint8_t'를 받아들이면 아무런 차이가 없을 것입니다. 그러나 이러한 세부 사항에 에너지를 낭비하지 않는 것이 좋습니다. – Groo
binutils의 gnu objdump는이 정보를 표시합니다. https://sourceware.org/binutils/docs-2.26/binutils/objdump.html#objdump를 참조하십시오. – Gregg
AVR과 같은 리소스가 제한된 시스템의 경우 C++가 아닌 C를 사용하십시오. – JimmyB