
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Canon Digital Photo Professio...
-
aviutl 透過性ロゴ エラー aviu...
-
マイコン メモリ使用量の節約方法
-
Chrome タブを100開いてもメモ...
-
アドビ系ソフトを快適に動かし...
-
AcrobatでPDFファイルの作成...
-
PDFはAcrobatに関連付けられて...
-
記号 縦かっこ
-
UserAgent を偽装してるのがバ...
-
PDFのリンク先Webページを別窓...
-
インターネットについて
-
APEX(PC版)が数秒に一度フリ...
-
社会保険料通知データの閲覧方...
-
ゼンリーについての質問です! ...
-
SDカードを入れるとPCがフリーズ!
-
NAVITIMEのホームページに数々...
-
任意のURLへ一定時間ごとに自動...
-
LAPLINKのリモートコントロール...
-
書き込みミスをしたCD-RWは再...
-
Windows10で古いソフトを使う場合
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Chrome タブを100開いてもメモ...
-
Illustratorでメモリ不足が起き...
-
0x00007FFBE89808CBの命令が、0...
-
AcrobatでPDFファイルの作成...
-
Canon Digital Photo Professio...
-
solarisでのメモリ使用量確認方法
-
グーグルアース 軽くする設定
-
aviutl 透過性ロゴ エラー aviu...
-
.何故、CMOSクリアで動くように...
-
イラストレーターのメモリ不足?
-
スレイプニル4が頻繁に強制終...
-
マイコン メモリ使用量の節約方法
-
64bitと32bitの違い
-
フォトショップCS2でのエラ...
-
イラレのメモリの割当てを増や...
-
JWWで、「範囲」を選択する...
-
【mac】PhotoshopCCでのペンタ...
-
パソコンを低速化させる方法は...
-
メモリ開放系ソフトの使用について
-
Craving Explorerが重いのです...
おすすめ情報