typedef struct a{
uint32 val1;
}A;
typedef struct b{
uint16 copy_val1;
}B;
void function1(A input)
{
B my_input;
my_input.copy_val1 = (uint16) input.val1; <-- Is this clean?
}
最初は構造体aを設計したとき、val1に2つの16ビット値が含まれると考えられました。しかし、私たちは1つの16ビットしか使用しませんでした。C typecasting uint32 to uint16
今私はメモリを節約するためにcopy_val1の型をuint32からuint16に変更しています。 きれいな方法で型キャストを行い、val1からの16ビット値がcopy_val1にコピーされることを確認する必要がありますか?
OSはMIPSアーキテクチャのvxworksです。
コードは機能していませんか?このようなキャスティングはうまくいくはずです。 – Caius
MIPSはアラインメントに対して非常に敏感です。コンパイラは構造体(パディング)内の要素をどのようにレイアウトするかについて多くの余裕があります。パックしないと、メモリを一切節約しないことになります。私の経験では、これは、長期的にはメモリの問題であなたを助けるつもりはないマイクロ最適化の一種です。実際、IMHOは、非常に特定のサイズになる必要のない整数値の型の最良の選択は、単純なint型です(注目すべき例外:AVRのような8ビットアーキテクチャでは、int8_tはデフォルトの正当な選択肢です) 。 – datenwolf
ここでは、あなたのプログラムにあなたのプログラムに入れることができるより重要なトリックがあります:どこか 'char memory_reserve [SIZEOF_MEMORY * 5/100];を' .bss'セクションに置きます。あなたのプロジェクトで利用可能なメモリの5%。結局のところ、数か月後には、長い夜と大量のメモリで動作するアルゴリズムで使用されている配列の最後のビットを絞り出すためにあらゆる努力を払って、予約からメモリを取り除いてその日を節約することができます。 – datenwolf