__align 和__packed对齐修辞符使用说明
来源:互联网 发布:adele 知乎 编辑:程序博客网 时间:2024/05/09 21:37
简单介绍一下对齐的使用:
1.__align(num)
这个用于修改最高级别对象的字节边界。__align 关键字指示编译器在 num 字节边界上对齐变量。在汇编中使用LDRD或者STRD时就要用到此命令__align(8)进行修饰限制。来保证数据对象是相应对齐。 这个修饰对象的命令最大是8个字节限制,可以让2字节的对象进行4字节 对齐,但是不能让4字节的对象2字节对齐。
__align 是一个存储类修饰符。它不影响函数的类型。
对于局部变量,num 值可为 1、2、4 或 8。
对于全局变量,num 可以具有最大为 2 的 0x80000000 次幂的任何值。
__align 关键字紧靠变量名称前面放置。
用法
如果声明的变量的常规对齐边界小于 num ,__align(num ) 是非常有用的。八字节对齐方式可以显著提高 VFP 指令的性能。
可以将 __align 与 extern 和 static 一起使用。
限制
由于 __align是存储类修改,他只修饰最高级类型对象不能用于:
类型,包括 typedef 、结构定义及函数参数。
只能进行过对齐。也就是说,可以将两个字节的对象按 4 个字节对齐,而不能将 4 个字节的对象按两个字节对齐。
示例
__align(8) char buffer[128];
void foo(void){
__align(16) int i;
}
__align(16) int i; // permitted as a global variable.
2.__packed
__packed是进行一字节对齐
1.不能对packed的对象进行对齐
2.所有对象的读写访问都进行非对齐访问
3.float及包含float的结构联合及未用__packed的对象将不能字节对齐
4.__packed对局部整形变量无影响
5.强制由unpacked对象向packed对象转化是未定义,整形指针可以合法定
义为packed。
1.__align(num)
这个用于修改最高级别对象的字节边界。__align 关键字指示编译器在 num 字节边界上对齐变量。在汇编中使用LDRD或者STRD时就要用到此命令__align(8)进行修饰限制。来保证数据对象是相应对齐。 这个修饰对象的命令最大是8个字节限制,可以让2字节的对象进行4字节 对齐,但是不能让4字节的对象2字节对齐。
__align 是一个存储类修饰符。它不影响函数的类型。
对于局部变量,num 值可为 1、2、4 或 8。
对于全局变量,num 可以具有最大为 2 的 0x80000000 次幂的任何值。
__align 关键字紧靠变量名称前面放置。
用法
如果声明的变量的常规对齐边界小于 num ,__align(num ) 是非常有用的。八字节对齐方式可以显著提高 VFP 指令的性能。
可以将 __align 与 extern 和 static 一起使用。
限制
由于 __align是存储类修改,他只修饰最高级类型对象不能用于:
类型,包括 typedef 、结构定义及函数参数。
只能进行过对齐。也就是说,可以将两个字节的对象按 4 个字节对齐,而不能将 4 个字节的对象按两个字节对齐。
示例
__align(8) char buffer[128];
void foo(void){
__align(16) int i;
}
__align(16) int i; // permitted as a global variable.
2.__packed
__packed是进行一字节对齐
1.不能对packed的对象进行对齐
2.所有对象的读写访问都进行非对齐访问
3.float及包含float的结构联合及未用__packed的对象将不能字节对齐
4.__packed对局部整形变量无影响
5.强制由unpacked对象向packed对象转化是未定义,整形指针可以合法定
义为packed。
- __align 和__packed对齐修辞符使用说明
- ARM编译器中对齐的使用__align和__packed
- stm32中字节对齐问题(__align(n),__packed用法)
- 内存管理之一__align字节对齐
- 关于__align(n) 字节对齐
- 结构对齐--__packed与#pragma pack
- 结构对齐--__packed与#pragma pack
- 结构对齐--__packed与#pragma pack
- 结构对齐--__packed与#pragma pack
- 结构对齐--__packed与#pragma pack
- Java变量,修辞符,关键字
- c语言 __align(); #pragma pack(8) 数据对齐
- 内存对齐,关于__align(n)的解析
- typedef __packed struct (结构体字节对齐)(转)
- __packed、#pragam pack()、 __attribute__(aligned(n))、 __attribute__(packed(n))字节对齐
- __align用法
- __align(num)
- 英语写作中的修辞
- 2013年几道腾讯实习笔试题
- jsp页面获取不到servlet中添加到request中的信息问题详解
- 实用方法收集
- Yahoo!教程:MapReduce
- mysql5.6 安装
- __align 和__packed对齐修辞符使用说明
- 图文混排
- win7下,adobe绿化软件配置错误,请卸载并重新安装该产品
- 调用c++动态库函数vs2008
- c++ 运算符重载 友元函数
- vc6.0一个workspace包含多个项目
- Windows下的java启动脚本
- ASP.NET FileUpload上传附件的大小限制
- Qt四舍五入取模取余操作