用的编译器都是英飞凌ADS,有的工程可以用__attribute__ ((aligned(256))),有的却不能,怎么回事,又要怎么解决
时间: 2023-11-29 19:55:12 浏览: 146
一个编译器优化引起的问题
`__attribute__ ((aligned(256)))` 是 GNU C 编译器的特有语法,可能在英飞凌 ADS 编译器中并不支持或者支持方式不同。具体支持情况需要查看英飞凌 ADS 编译器的文档。
如果该编译器不支持 `__attribute__ ((aligned(256)))`,可以考虑使用其他方式来实现数据对齐。例如,在结构体中使用 `char` 数组来实现对齐:
```c
struct example {
char data[256] __attribute__((aligned(256)));
};
```
或者使用 `#pragma` 指令:
```c
#pragma pack(256)
struct example {
// structure members
};
#pragma pack()
```
注意,使用 `#pragma` 指令可能会影响整个编译单元的数据对齐方式,需要谨慎使用。
另外,如果数据对齐是为了提高访问速度,可以考虑使用特定的指令来访问对齐的数据,例如 ARM 中的 LDRD 和 STRD 指令。
阅读全文