組込みC > enumと#defineの違い


動作対象
MSP430
#define IDX_CMD (1)
#define IDX_UTC_TIME (2)
#define IDX_STS (3)
#define IDX_LAT (4)
#define IDX_NS (5) // North or South
#define IDX_LON (6)
#define IDX_EW (7) // East or West
#define IDX_VELOCITY (8)
#define IDX_DIRECITON (9) // or orientation
#define IDX_UTC_DATE (10)
enum {
  IDX_CMD = 1,
  IDX_UTC_TIME,
  IDX_STS,
  IDX_LAT,
  IDX_NS, // North or South
  IDX_LON,
  IDX_EW, // East or West
  IDX_VELOCITY,
  IDX_DIRECITON, // or orientation
  IDX_UTC_DATE,
  // etc
};

どちらがメモリ使用効率が良いか?という疑問を持った。

MSP430の開発環境でのメモリ使用結果は、ともに以下だった。
GPSの値をUARTで読み取って、AQM1602(I2C接続のキャラクタLCD)に表示する実装。

5 434 CODE
  239 DATA (+19 absolute)
   25 CONST

自分の理解では、#defineの場合はプリプロセッサでコードの該当箇所が数値に置き変わる。そのため、余分なメモリ消費がない。
一方で、enumの処理はどうなのかは不明。
上記のメモリ消費だけを見れば、enumの場合もプリプロセッサで置換が起きているとも考えられるが、未消化。

WIP (Work In Progress)。

以下は上記の疑問の回答にはなっていない。
http://stackoverflow.com/questions/10006700/does-defining-enum-type-has-a-heavy-memory-imprint
http://stackoverflow.com/questions/136946/difference-between-enum-and-define-statements