1. __align(
span
):指示编译器在
字节边界上对齐变量。n
对于局部变量,n
值可为 一、二、4 或 8。.net
对于全局变量,n
能够具备最大为 2 的 0x80000000 次幂的任何值。code
__align
关键字紧靠变量名称前面放置。对象
注意事项:blog
只能进行过对齐。也就是说,能够将两个字节的对象按 4 个字节对齐,而不能将 4 个字节的对象按两个字节对齐。get
用法举例:编译器
__align(8) char buffer[128]; /* buffer从8字节对齐边界开始*/ void foo(void) { ... __align(16) int i; /* 这个对齐值是不容许用在局部变量中的*/ ... } __align(16) int i; /* 做为一个全局变量,这个对齐值是被容许的*/
2. __asm:此关键字用于将信息从编译器传递到 ARM 汇编器armasm。asm
用法:编译
a. 嵌入式汇编器
可使用 __asm
关键字声明或定义嵌入式汇编函数。例如:
__asm void my_strcpy(const char *src, char *dst);
b. 内联汇编器
可使用 __asm
关键字将内联汇编合并到函数中。例如:
int qadd(int i, int j) { int res; __asm { QADD res, i, j } return res; }
c. 汇编器标签
可使用 __asm
关键字为 C 符号指定汇编器标签。例如:
int count __asm__("count_v1"); // export count_v1, not count
d. 已命名的寄存器变量
可使用 __asm
关键字声明已命名的寄存器变量。例如:
register int foo __asm("r0");
3.
4.
5.
....