パスワードを忘れた? アカウント作成
14117383 journal
日記

delta-keeperの日記: ソケット通信に関する昔からの疑問 2

日記 by delta-keeper

I2CとかSPI周りのドライバや、ソケット通信なんかのコードでパケットフォーマットを構造体に入れて扱う人はたくさん居ると思います。

だが、いつも不思議なのは「構造体パディングを考慮して、アライメント揃えたフォーマットにしろ!」という輩が、どのプロジェクトにも一人は混じっている点。
僕の担当してた案件ではまずそんなコードは書かず、#pragma pack(1)とかで設計に合わせ込むようにしていたんだけど・・・

こういうオサーンはなんで機種依存にするようなコードを書きたがるのか、と常々疑問に思ってた。

お前の環境はx64でもx86でもARMでもSHでもH8でもパディングは一緒なのか?
そしてコンパイラに#pragma packがないのか?

徹底的に議論したいと、いつも思ってます。

この議論は、delta-keeper (31927)によって テキ禁止として作成されたが、今となっては 新たにコメントを付けることはできません。
  • アライメントが揃ってないとダメってのが、構造体パディング云々になってるのですかね。
    その辺良く分かって無くてそう言ってるのかしら。

    ドライバ書くような方には釈迦に説法のような気もしますが。
    アライメントに関しては確かに環境依存なんですが、CPUによっては揃ってないと大変なんですよね。

    そしてコンパイラに#pragma packがないのか?

    有っても意図したとおりに機能するかや余計なコストが発生するかはまた別の話ですし。
    ハードウェアやコンパイラやAPIのドキュメント参照しておかないとハマる可能性が。
    http://www.kumikomi.net/archives/2008/05/08hard2.php [kumikomi.net]
    APIがアライメントを要求(今時は非シングルコアなので該当)
    https://docs.microsoft.com/en-us/windows/win32/api/winnt/nf-winnt-inte... [microsoft.com]

    とはいえ、その辺含めて設計段階で良きに計らってるとは思いますが。
    相手の都合でエンディアンがひっくり返ってるとか良く有る話でしょうし。

    • お返事ありがとうございます。

      > アライメントが揃ってないとダメってのが、構造体パディング云々になってるのですかね。
      これを壊れたラジオのように言い続けている仕様決定者がいるので、頭を抱えている次第ですね、ハイ・・・
      ソースコードを仕様に整合するのか、はたまた仕様をソースコードに整合するのか・・・
      「一般的」というのを言い出すとキリが無いですが、出来るだけ機種依存な造りはしないで欲しいと思ってます。

      # ちなみに199x年頃のH8ですら、packプラグマをサポートしてます
      親コメント
typodupeerror

UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア

読み込み中...