それは、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 )
言語の弊害でしょう (スコア:2, 興味深い)
機械語を理解しなきゃいけない高級言語は欠陥言語です。
この前提からすると、プログラマはマシン語を理解する必要はない!
理解しなければならないとすると、使ってる言語が悪い
Re:言語の弊害でしょう (スコア:0)
いまだに結構使われていると思われる C は「低級言語」とか「高級アセンブラ」とか呼ばれたりすることがありますが、やはりアセンブリ言語レベルでの理解はいくらかは必要なものと思います。
たとえば、メモリがどのように使われるかを理解していないと、
上記のようなコードがなぜ問題なのか理解できないことでしょう。こーゆーのは多少高級になった C++ でも同様ですね。まあ欠陥言語ですけど。
Re:言語の弊害でしょう (スコア:1)
以下のようなプログラムだと、マシン語というか OS の知識が必要になるかもしれないけど。
Re:言語の弊害でしょう (スコア:0)
Re:言語の弊害でしょう (スコア:1)
Re:言語の弊害でしょう (スコア:1, 参考になる)
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回繰り返す。
となって大幅にパフォーマンスが低下する。
Re:言語の弊害でしょう (スコア:0)
必ずしもOSは関係無いとは言えないよ。
MMUとかTLBとか知ってる?
Re:言語の弊害でしょう (スコア:0)