質問

void function(int a, int b, int c) {
   char buffer1[5];
   char buffer2[10];
}
  

私たちは、そのメモリを覚えなければならない唯一のことができます   単語の倍数で対処します   サイズ。我々の場合のワードは4バイトであり、   または32ビット。私たちの5バイトのバッファがあるので、   実際に8バイト(2ワード)を連れて行きます   されているメモリの、そして私たちの10バイトのバッファ   12バイト(3ワード)のを取るつもり   メモリ。 SPがあることである理由です   20によって減算される。

それはCEILないのはなぜ

((5 + 10)/ 4)* 4 = 16?

役に立ちましたか?

解決

個々の変数を整列させる必要があるため。あなたの提案式を使用すると、パフォーマンスのために悪いである、非整列以下の変数を残して、スタック上の唯一の最初の変数を合わせると思います。

これは、「梱包」として知られており、プラグマとC / C ++で行うことができますが、非常に特殊な状況でのみ有用であり、パフォーマンスのためにと潜在的なランタイムトラップの原因としても危険なことができます。一部のプロセッサがプログラムをクラッシュします実行時にアンアラインドアクセス、上の障害を生成します。

他のヒント

あなたのアーキテクチャ上の変数が個別に整列されています。その開始アドレスの両方が4バイト境界で整列されるようにバッファ1は12 8とバッファ2に切り上げられます。だから、8 + 12 = 20。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top