C99では、新しい複合型が定義されました。私は、コンパイラがこの知識をメモリアクセスの最適化に利用できるかどうかを理解しようとしています。タイプのこれらのオブジェクト(A
- F
)はcomplex float
、メモリ内で8バイトに整列されることが保証されていますか?
#include "complex.h"
typedef complex float cfloat;
cfloat A;
cfloat B[10];
void func(cfloat C, cfloat *D)
{
cfloat E;
cfloat F[10];
}
の場合、質問は、ポインタストレージ自体ではなく、が指すD
オブジェクトに関連していることに注意してください。D
そして、それが整列されていると想定される場合、渡されたアドレスが実際の複合体であり、別の(8整列されていない)タイプからのキャストではないことをどのように確認できますか?
D
更新1:私はおそらくポインタに関する最後のコメントで自分自身に答えました。B / c関数呼び出しのパラメーターに割り当てられるアドレスを知る方法はなく、8方向に整列されることを保証する方法もありません。これは__builtin_assumed_aligned()
関数を介して解くことができます。
他の変数については、まだ疑問が残ります。
更新2:フォローアップの質問をここに投稿しました。