FTPサーバーの次は、HTTPサーバーも実装しているが、まだ機能が不足
している、順次機能追加していく。
登録タスクの実行としくみ:
組み込みマイコンで動かすサーバーでは、固定されたページを単に送るだけで
は無く、状況により動的に生成した構文を送る事ができる。
その際、リンクパスと、関連する実行関数を登録出来ると、非常に利便性が高
い。
C++11 から導入された、「std::function」テンプレートは、関数ポインタでも、
ラムダ式でも、クラスのメンバーでも何でも登録できる、便利な物だが、何らか
の要因により、コンパイル、リンク後の使用メモリーが巨大になる現象が発生し
ている・・・
#include <functional> typedef std::function< void () > http_task_type; http_task_type task_; void aaa() { if(task_) { task_(); } }
※関数呼び出しが1箇所の場合
text data bss dec hex 115676 71804 79388 266868 41274
void aaa() { if(task_) { task_(); } } void bbb() { if(task_) { task_(); } }
※関数呼び出しが2箇所になった場合
text data bss dec hex 515860 106844 84148 706852 ac924
実行バイナリーは500K増え、RAMも40K増えている・・
RX64M のメモリーは潤沢なので、それでも問題は無いが、納得は出来ない。
組み込みマイコンでC++を使う場合の難点は、巨大なクラスを使えない(使わ
ない)事で、あらかじめ判っている事として、「iostream」関係がある。
(1)「iostream」を使わない場合
text data bss dec hex 86708 48 20988 107744 1a4e0
(2)「iostream」を使った場合
text data bss dec hex 528228 108620 27936 664784 a24d0
※なので、それに代わる「format」、「input」クラスなどを実装している。
どうやら、「std::function」は、何らかの場合に、「iostream」の機能を使うら
しい・・・
※「例外」と「rtti」は無効にしている。
※ソースコードを詳細に追っていないので、明確には判らないが・・・
※コードは巨大で複雑なので、時間が出来た時にでも調査する事にするが、とりあ
えず、巨大にならないように工夫して実装するしか無い。