質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

意見交換

クローズ

4回答

999閲覧

マイコンの開発でC++のファイル管理について

tuioku

総合スコア42

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2023/04/21 05:17

0

0

esp32などのマイコンでC++でコードを書くとします。
デモのソースコードを見る限りだとあまりheaderファイルなどに分けたりしない印象です。
headerやclassで細かく分割しようと思っているのですが、一般的にはメモリなどの枯渇などの懸念があるのであまりそういったことはやらないのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答4

#1

episteme

総合スコア16614

投稿2023/04/21 05:22

編集2023/04/21 05:24

デモコードは簡単に試せることを考慮するため、コード一本で提供されがちなのでは。
マジなアプリケーションでは適切に~.h/.cpp を分割します。
※ ファイル総量やコンパイル時間はその分増えますけど

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

ardin

総合スコア546

投稿2023/04/21 07:43

マイコンで昔やっていたころは関数呼び出しのオーバーヘッドを嫌って分割しないでいましたね。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#3

thkana

総合スコア7639

投稿2023/04/21 12:47

ヘッダは分けたソースファイルの情報をソース間で共有するために作るので「ヘッダに分ける」ようなことにはならないと思います。

数Kバイトでサイズを計るようなプログラムであれば関数/クラスの分割によるオーバーヘッドも気になるかも知れませんが、ESP32ですよね。MBオーダーのROMと数百KBオーダーのRAMを使えるわけで、それを気にするものでもないと思います。

クラスの粒度を小さくするというのならともかく、クラスの構成は変えずにクラスをファイルに独立して記述するかどうかは(ターゲットの)メモリには影響がないでしょう。

で、Javaであれば1クラス1ファイルとかいう話はあるでしょうが、C++ではそういうのはありませんから、コンパイル時間やファイル管理に問題がないのなら分けようと分けまいとその辺は「方針」の問題かと思います。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#4

dameo

総合スコア943

投稿2023/04/22 02:09

大昔256KB程度のROMでOSのないソフト開発をしてたことがありますが、CASEツールを使ってたこともありクラスごとにヘッダとソースを分けてました。当たり前ですが、単一にしようと複数にしようとバイナリサイズが変わるわけではありません。

関数呼び出しのオーバーヘッドは、Cに比べるとクラス化してる分(this分の)オーバーヘッドはあります。また仮想関数や、RTTIを使うなら(制御系ではRTTIは原則使用しないと思うけど)便利な分、関数呼び出しの前後に若干オーバーヘッドはあるかもしれません。仮想関数でやるような処理はCで書いても結局switch文で記述して同じようなバイナリが吐かれると思いますが。あとC++でtemplateを使うとインスタンス化されたコードが嵩張るとか、他の方が言われてるように、コンパイル、リンク時間が長いといったことはあります。しかし最適化時にインライン展開が行われるため、ヘッダ/ソースによる実行速度の差異はありません。

質問者さんの言ってることは全部違ってますよ。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問