タグ

arrayとmemoryに関するmasterqのブックマーク (2)

  • Zigで配列をなめるときにはできるだけwhileでなくてforを使いましょうという話

    まあ、当たり前のことなんですけどね。 前回の記事のプログラムを書き直した 前回の記事のMJPEGからJPEGを切り出すプログラムにはバグがありました。脚注にも書きましたが、それは読み込んだバッファの最後のバイトが0xffで、次のバッファの先頭が0xd9のときに、JPEGの終わりを見逃してしまうというものです。 なので、ちゃんと4つの状態を遷移するように書き直しました。 const std = @import("std"); const fs = std.fs; const io = std.io; const os = std.os; const BUF_SIZE = 64 * 1024; const OUTPUT_FILENAME_PATTERN = "out{d:0>4}.jpg"; const JPEG_START0 = 0xff; const JPEG_START1 = 0xd8;

    Zigで配列をなめるときにはできるだけwhileでなくてforを使いましょうという話
    masterq
    masterq 2023/07/21
    "(forを使うと)配列の範囲をはみ出さないことが明確になるので、コードを読むときの脳の負荷が減るし、速いコードが生成されます"
  • CからZigに書き直して激遅になったと思ったら最適化オプションの変更で改善した話

    メモとして残します。 MJPEGを入力してJPEGに切り出すプログラム ChatGPT-4 に作らせました。 USBカメラから入力された生のmjpegの映像データを標準入力から受けて、jpegの静止画に切り出してファイルに保存するプログラムをC言語で書いてください。書き出すファイル名はout%03d.jpg という感じでフレーム番号を含めてください。ソースコード内のコメントは英語で書いてください。 最初のものはffmpegやらたくさん外部のライブラリに依存するコードを出してきたので、もっとシンプルなやつにしてくれとお願いしました。できたものはこれ。[1] #include <stdio.h> #include <fcntl.h> #include <unistd.h> #define BUF_SIZE 1024 #define OUTPUT_FILENAME_PATTERN "out%03

    CからZigに書き直して激遅になったと思ったら最適化オプションの変更で改善した話
    masterq
    masterq 2023/07/21
    "bufferの配列を参照しているが、あらかじめ添字はチェックしているからOutOfBoundsのエラーになることは無いことは確信できます。そこで、ランタイムチェックを明示的に外す指定を追加してみました。"
  • 1