A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
マイコン ということに限定したこととして
1)コード効率のいいマイコンを利用する。
規模と性能も天秤にかける必要があります。 命令長が違います。
2)メモリーモデルを最適化する。
8086の場合には、small compact medium large Huge? モデルとかあって
規模に応じてポインタがfar(32bit) near(16) などで最適化されます。
いまだに、こういうことができるマイコンもあります。
3)integerサイズを最適化する。
2)と似たようなことですが、intのサイズをコンパイラによって変えられるものが
あります。shortを使えば同じという場合(注1)もありますが、通常コンパイラの
インテグラルプロモーションによって一旦intに変換されます。(注1インテグラルプロモーション
しないコンパイラもあります)
4)コンパイラの最適化をサイズに指定する。
optimaizeのオプションでコードサイズを縮小するオプションがあります。
5)テーブルデータをRAMに展開しないようにする。(#2で該出)
なんのことかわからないかもしれませんが、初期化済み変数を定義した場合に
一旦ROMに定義され(ローディング時に初期化、もしくはROM化の場合はROMに書かれています)
それをRAMにコピーしてから、main()が呼ばれます。つまりRAM/ROM両方エリアが利用されます。
書き換える必要がなければ、ROMだけになるように定義します。
C言語の規約そのものにROM化という概念がないため、あくまでコンパイラの拡張機能に
なりますのでコンパイラのマニュアルを見てみましょう。
6)プロトタイプ宣言をする
コンパイラによりますが、プロトタイプ宣言がないとスタック渡し、ある場合には、
一部のパターンでレジスタ渡しの場合があります。
7)動的メモリを使わない
malloc()等の動的メモリを使わないことです。TCPスタックなどで必要になる場合も
ありますが、TCPスタックで動的メモリを利用しないものもあります。
選択が可能であれば、動的メモリを必要としないものにしましょう。
No.3
- 回答日時:
下記の本をお勧めします。
省メモリプログラミング―メモリ制限のあるシステムのためのソフトウェアパターン集
http://www.amazon.co.jp/gp/product/4894714086/
Amazonの中身検索で読めそうなので参考にしてはいかがでしょうか。
とりあえずどのような方法があるかと言うことであれば、目次のあたりを見ると一覧になっています。
No.2
- 回答日時:
(1)データはビット単位で細かく管理する
(2)巨大なライブラリ関数は使わない
(とくにprintf系とかscanf系とか)
(3)同じ処理を行うルーチンは必ず共通化する
(4)インライン関数、大きなマクロ処理等は使わない
(関数コールした時のスタックサイズの方が大きければ別だけど)
(5)重複したデータは持たないようにする
(6)変更しないテーブルデータ等はRAMに展開しないようにする
(7)イベントハンドラの呼び出し等は複雑な条件分岐処理をやるよりベクターテーブル等で簡潔に呼び出すようにする
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- iPhone(アイフォーン) iCloudのデータをiPhoneメモリに移動したい 1 2022/10/24 22:11
- 節約 投資を夢見ているので、節約をはじめました。 4 2022/10/03 23:49
- CPU・メモリ・マザーボード メモリが使用可能にならない 3 2022/08/13 17:13
- その他(社会・学校・職場) いまだにフロッピーディスクを使う役所や銀行ってどう思いますか? 節約といえば聞こえは良いけど、 例え 5 2022/05/03 16:26
- その他(悩み相談・人生相談) 億万長者長者になるには ① 節約 ② 節税 ③ 起業 ④共働き ⑤ 資産運用 が通説ですが、それ以外 9 2022/08/06 06:36
- Windows 10 実装メモリとタスクマネージャーのメモリ使用量不一致について 4 2022/12/15 01:07
- CPU・メモリ・マザーボード Windows11アップデート後の不具合(メモリ不足)について 9 2023/01/04 11:34
- IT・エンジニアリング アドレス空間(メモリマップ)について教えてください。 マイコンには必ずメモリマップが記載されています 3 2022/06/17 09:42
- その他(コンピューター・テクノロジー) USBメモリのアクセスの遅い部分を避けて利用する方法 5 2022/10/18 13:32
- 工学 1つのタクトスイッチで複数の並列回路を閉じ、アースにつなげることができるスイッチはありますか。 2 2022/08/06 10:38
このQ&Aを見た人はこんなQ&Aも見ています
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Illustratorでメモリ不足が起き...
-
Chrome タブを100開いてもメモ...
-
.何故、CMOSクリアで動くように...
-
ゲーミングPCの動作不良について
-
グーグルアース 軽くする設定
-
ブラウザ、フォトビューアなど...
-
solarisでのメモリ使用量確認方法
-
メモリ消費がいきなりあがりました
-
Illustratorを使うのでMacBookA...
-
photoshop CS5の多角形選択ツー...
-
OSがXPpro 32bit でメモリ8GBを...
-
Windows32と64? はどちらの方...
-
イラレのメモリの割当てを増や...
-
RAMディスク 64bit
-
動画編集 PremierPro バージョ...
-
PDFのリンク先Webページを別窓...
-
ブラウザを開くショートカット...
-
5chでエロ広告を出さない方法
-
グーグルマップで3D画像が見...
-
パソコンの画面の左上の青い渦...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Illustratorでメモリ不足が起き...
-
Chrome タブを100開いてもメモ...
-
パソコンでChromeを使用してい...
-
Canon Digital Photo Professio...
-
グーグルアース 軽くする設定
-
AcrobatでPDFファイルの作成...
-
動画編集 PremierPro バージョ...
-
.何故、CMOSクリアで動くように...
-
マイコン メモリ使用量の節約方法
-
フォトショップでファイル保存...
-
イラレのデータを開く事ができ...
-
solarisでのメモリ使用量確認方法
-
64bitと32bitの違い
-
イラストレーターのメモリ不足?
-
aviutl 透過性ロゴ エラー aviu...
-
adobe premiere pro初心者です...
-
ノートンのメモリ消費量について
-
dreamweaverでサイトを作り始め...
-
Visio 2013で、メモリ不足が表...
-
Illustrator CS6、PhotoShop CS...
おすすめ情報