0
0
esp32などのマイコンでC++でコードを書くとします。
デモのソースコードを見る限りだとあまりheaderファイルなどに分けたりしない印象です。
headerやclassで細かく分割しようと思っているのですが、一般的にはメモリなどの枯渇などの懸念があるのであまりそういったことはやらないのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
#1
総合スコア16612
投稿2023/04/21 05:22
編集2023/04/21 05:24デモコードは簡単に試せることを考慮するため、コード一本で提供されがちなのでは。
マジなアプリケーションでは適切に~.h/.cpp を分割します。
※ ファイル総量やコンパイル時間はその分増えますけど
#3
総合スコア7733
投稿2023/04/21 12:47
ヘッダは分けたソースファイルの情報をソース間で共有するために作るので「ヘッダに分ける」ようなことにはならないと思います。
数Kバイトでサイズを計るようなプログラムであれば関数/クラスの分割によるオーバーヘッドも気になるかも知れませんが、ESP32ですよね。MBオーダーのROMと数百KBオーダーのRAMを使えるわけで、それを気にするものでもないと思います。
クラスの粒度を小さくするというのならともかく、クラスの構成は変えずにクラスをファイルに独立して記述するかどうかは(ターゲットの)メモリには影響がないでしょう。
で、Javaであれば1クラス1ファイルとかいう話はあるでしょうが、C++ではそういうのはありませんから、コンパイル時間やファイル管理に問題がないのなら分けようと分けまいとその辺は「方針」の問題かと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#4

退会済みユーザー
総合スコア0
投稿2023/04/22 02:09
大昔256KB程度のROMでOSのないソフト開発をしてたことがありますが、CASEツールを使ってたこともありクラスごとにヘッダとソースを分けてました。当たり前ですが、単一にしようと複数にしようとバイナリサイズが変わるわけではありません。
関数呼び出しのオーバーヘッドは、Cに比べるとクラス化してる分(this分の)オーバーヘッドはあります。また仮想関数や、RTTIを使うなら(制御系ではRTTIは原則使用しないと思うけど)便利な分、関数呼び出しの前後に若干オーバーヘッドはあるかもしれません。仮想関数でやるような処理はCで書いても結局switch文で記述して同じようなバイナリが吐かれると思いますが。あとC++でtemplateを使うとインスタンス化されたコードが嵩張るとか、他の方が言われてるように、コンパイル、リンク時間が長いといったことはあります。しかし最適化時にインライン展開が行われるため、ヘッダ/ソースによる実行速度の差異はありません。
質問者さんの言ってることは全部違ってますよ。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。