ようやく上司のちょっとした弱点を掴んだ。DSP のアーキテクチャは ARM と違い、DSP のバイト(byte)は 16 ビットなので、構造体のアライメントも sizeof() の結果も変わってくる。
しかも、その上司は memset() や memcpy() といった標準ライブラリ関数を頑なに拒否し、手動ループで一括処理することにこだわっている。コスト削減のため ARM チップのプラットフォームへソフトウェアを移植すると、問題が発生する。この問題は、AC6 コンパイラ(Os)ですら発生しないのに、GCC で Os 最適化を有効にすると顕在化する。
素直に sizeof() や memset() のような標準ライブラリの組み合わせを使っていれば、こうした問題は起きない。どちらもバイト(byte)を基準にしているからだ。社畜プロジェクトでは、そう要求しても無駄だった。ただ、自分のオープンソースライブラリでは、どれも慎重に使うようにしている。実際、そのほうがソフトウェアライブラリの互換性が高まる。
DSP の sizeof()