質問: お世話になります。 聞きたいことから話しますと、 どのような事柄やプログラムコード、アルゴリズムから省メモリの意識を持ちましたか? char や short int等、特にcharなど可動範囲の意識をどのようにして培いましたか? よろしければアドバイスお願いいたします。 以前の質問で変数の型を意識してコードを作ることを考えてきましたが、いろいろなサイトの入門問題を解いていく中で、いまいち、使用メモリを少なくする意識というのが培われません。 もちろん、10できるものが5の容量でできたら残りの5に他の機能を加えられるという、商品価値として表面的には意識しています。 それでも、特にchar型が疑問なのですが、文字を扱う際のchar型は今の段階で理解できているつもりです。 ただ、数字の可動範囲が255までだから、charですむでしょ、というような考えがいまいち持てずにいます。 単純なインクリメント、デクリメントはできまずが、演算をする際には文字コードから数値に直したりと初心者としては頭を使います。 atoiなどの関数を使用して数値に変換できますが、そこまでしてcharで宣言するべきなのか悩みます。 自分が実際に商品に関わったことがないので1バイトの重みが理解できていない、もしくはcharや型への認識が甘い、というのが一番なところなんでしょうが笑 追記 回答ありがとうございました。charもろもろ、どの段階でそういう意識がついたのか、自分の中でふむふむ(@_@)となったものをBAにさせていただきました。 ただ、今の環境でそこまで意識しなくてもいいこと、バグの発生の可能性を小さくする、他の機器とあわせたときの差を小さくするなどの観点からメモリを全く意識しなくてもいいかというとそうではないことが表面的にではありますが、理解が深まりました。 改めて、テーマを決めてプログラムに触れてみようと思います。
回答: > > どのような事柄やプログラムコード、アルゴリズムから省メモリの意識を持ちましたか? > > > 動的メモリ確保(`malloc`)失敗に直面すると、イヤでも意識することになります(笑 ただし、一般的なサーバ/PC環境で省メモリプログラミングを意識的する場面はほとんど無いはずです。一方、組込機器などコンピューティングリソースに制限が強い分野では、省メモリは依然として重要なテーマかと思います。 “省メモリ”という観点では、書籍「省メモリプログラミング―メモリ制限のあるシステムのためのソフトウェアパターン集」がおすすめです。 > > それでも、特にchar型が疑問なのですが、文字を扱う際のchar型は今の段階で理解できているつもりです。 > > [...] > > atoiなどの関数を使用して数値に変換できますが、そこまでしてcharで宣言するべきなのか悩みます。 > > > 「扱う値範囲が小さいから」という理由だけでchar型を選択するのは、メリットよりもデメリットが大きいため避けるべきです。C言語の場合、整数値の計算過程では必ずint型となるため、int型より小さい整数型の扱いには注意が必要です。 数個程度のローカル変数では、意図的にchar型やshort型を選択しても省メモリ効果はほとんどありませんし、むしろ型変換のために実行速度が低下したりします。 例外として、大量のデータを扱う配列型ならば小さな型を利用すると大きな省メモリ効果を見込めます。(例:画像ピクセルデータなどはunsigned char型の配列として保持されますし、音声波形データはshort型配列として保持されます)