パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

プログラマーはマシン語を理解しておくべき?」記事へのコメント

  • by Anonymous Coward
    そもそも、高級言語は「プログラマに低級言語を意識させないこと」を目的に作られているので
    機械語を理解しなきゃいけない高級言語は欠陥言語です。
    この前提からすると、プログラマはマシン語を理解する必要はない!
    理解しなければならないとすると、使ってる言語が悪い
    • いまだに結構使われていると思われる C は「低級言語」とか「高級アセンブラ」とか呼ばれたりすることがありますが、やはりアセンブリ言語レベルでの理解はいくらかは必要なものと思います。

      たとえば、メモリがどのように使われるかを理解していないと、

      char* int2str(int n)
      {
          char str[100];
          sprintf(str, "%d", n);
          return str;
      }

      上記のようなコードがなぜ問題なのか理解できないことでしょう。こーゆーのは多少高級になった C++ でも同様ですね。まあ欠陥言語ですけど。

      • それは、C 言語のレベルでもわかると思う。
        以下のようなプログラムだと、マシン語というか OS の知識が必要になるかもしれないけど。

        #define ARYLSIZ 4096
        #define ARYHSIZ 10240

        int main()
        {
            char ary[ARYHSIZ][ARYLSIZ];
            int h, l;
        #if 1
            for ( h = 0; h < ARYHSIZ; ++h ) {
                for ( l = 0; l < ARYLSIZ; ++l ) {
                    ary[h][l] = 1;
                }
            }
        #else
            for ( l = 0; l < ARYLSIZ; ++l )

        • 何が問題なのかマジわからん。使えるスタックのサイズなら(40MBが現実的に大きめだとしてもそれは)環境に拠る話だし。
          • スタックでなくても良いし、ARYHSIZ を 1024 にしても古いマシンならたぶん違いが出ます。(私のマシンでははっきり出ました^^;)
            親コメント
            • by Anonymous Coward on 2007年09月22日 2時02分 (#1222974)
              OSの知識とか言ってるあたり、君も理解してないようだ。
              CPUのキャッシュにのったまま処理されるかどうかが問題であってOSは一切関係ない。
              簡潔に理解するためにCPUキャッシュが4096バイト×1しかないとしよう。

              #if 1 から #else までの場合、

              1.メモリからCPUキャッシュに4096バイト読み込む。
              2.4096バイトを全部1にしてキャッシュからメモリに戻す。
              3.1~2を10240回繰り返す。

              となるけど、#else から #endif までは

              1.メモリからCPUキャッシュに4096バイト読み込む。
              2.1バイトを1にして(次の1バイトでキャッシュヒットしないために)キャッシュからメモリに戻す。
              3.1~2の処理を4096回繰り返す。
              4.1~3の処理を10240回繰り返す。

              となって大幅にパフォーマンスが低下する。
              親コメント
              • いや、それで差が出るかはキャッシュの構成に寄るんだが。
                必ずしもOSは関係無いとは言えないよ。
                MMUとかTLBとか知ってる?
            • で、何の関係がある話なんでスカ?

ソースを見ろ -- ある4桁UID

処理中...