在 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 对齐)类型的强制转换?
更新 1:我可能在关于D
指针的最后一条评论中回答了自己。B/c 没有办法知道函数调用的参数会被分配到什么地址,也无法保证它是 8 位对齐的。这可以通过__builtin_assumed_aligned()
函数来解决。
对于其他变量,这个问题仍然存在。
更新 2:我在这里发布了一个后续问题。