C言語を勉強してきた中で私の致命的な思い違いシリーズの第三弾です。
今回は、練習で「標準入力からテキストを読み込んで行数をカウントする」という簡単なプログラムを作成した時のことです。標準入力で受けた内容を1バイトづつ読み込み、読み込んだ値が改行コードの場合はカウントアップして行数をカウントする内容のプログラムです。このプログラムの中で遭遇した初歩的なミスの話です。
続きを読む »C言語を勉強してきた中で私の致命的な思い違いシリーズの第三弾です。
今回は、練習で「標準入力からテキストを読み込んで行数をカウントする」という簡単なプログラムを作成した時のことです。標準入力で受けた内容を1バイトづつ読み込み、読み込んだ値が改行コードの場合はカウントアップして行数をカウントする内容のプログラムです。このプログラムの中で遭遇した初歩的なミスの話です。
続きを読む »通常の業務とは別にC言語を少しずつ勉強しています。C言語の鬼門と言われるポインタの動きもある程度理解し、構造体、線形リストやハッシュなどを使った簡単なプログラムを書けるようになりました。しかし、C言語としてかなり初歩的なことにも関わらず、今まであんまり意識せずにいたために致命的な思い違いをしたままだった事が幾つかあります。今回はその中でもかなり初歩的で、C言語を勉強した人の多くは同じような疑問を抱いたのではないかと思うことについて書きます。
皆さんは知ってましたか?C言語では必ずしも 100+100=200にならないって。
続きを読む »以前C言語で、業務とはまったく関係のないお遊びプログラムを作っている時に、不可解な現象に悩まされました。 とある関数の内部で、呼び出し元の情報を書き換えて、関数を抜け出す時に本来の戻り先とは別の戻り先に制御を移すという、ちょっと変な処理を行うものです。 この時は何か目的があってプログラミングをしていたわけではなく、あまり深く考えもせずに作っていたので、最初はプログラムがバグってるのかな?と思っていました。 しかし、何をやってもコンパイル時に最適化オプションを付けた時だけ発生するので、気になり調査しました。
続きを読む »現在のJavaでは資源の節約があまり意識されなくなってきていますが、 今でも少ない資源(メモリ・CPU・VRAM等のリソース)の下でJavaを使ったプログラムのニーズはあります。 例えば、今では誰もが持っている携帯電話や家電製品等の組み込み系がそれに当たります。 ここでは、携帯電話でのJavaアプリケーションを例にとって、リソースが少ない環境下で、以前に私が行ったJavaとは言いがたいドケチ・プログラミングの一例を紹介します。
続きを読む »最近のCコンパイラは、プログラマが意図して行った最適化よりも賢く、
最適なコードを生成するといいます。
昔「2の倍数で割るなら割り算使うより、シフト演算の方が早いからそう書け!」と言われたことがあります。確かに、div命令とsar命令ではクロック数はdiv命令の方が遥かに多かったと思いますが、実際のところそこまで意識する必要があるのでしょうか?
と、思いつつシフト演算を使っていたんですが、コンパイラの出力するコードを見る事はありませんでした。そこで実際にどの程度のものなのかを実験してみました。
続きを読む »