关于linux内核中的"__attribute__ ((packed))"
来源:
http://jimmy-lee.blog.hexun.com/8001013_d.html
__attrubte__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐。
#define __u8 unsigned char
#define __u16 unsigned short
/* __attribute__ ((packed)) 的位置约束是放于声明的尾部“;”之前 */
struct str_struct{
__u8 a;
__u8 b;
__u8 c;
__u16 d;
} __attribute__ ((packed));
/* 当用到typedef时,要特别注意__attribute__ ((packed))放置的位置,相当于:
* typedef struct str_stuct str;
* 而struct str_struct 就是上面的那个结构。
*/
typedef struct {
__u8 a;
__u8 b;
__u8 c;
__u16 d;
} __attribute__ ((packed)) str;
/* 在下面这个typedef结构中,__attribute__ ((packed))放在结构名str_temp之后,其作用是被忽略的,注意与结构str的区别。*/
typedef struct {
__u8 a;
__u8 b;
__u8 c;
__u16 d;
}str_temp __attribute__ ((packed));
typedef struct {
__u8 a;
__u8 b;
__u8 c;
__u16 d;
}str_nopacked;
int main(void)
{
printf("sizeof str = %d/n", sizeof(str));
printf("sizeof str_struct = %d/n", sizeof(struct str_struct));
printf("sizeof str_temp = %d/n", sizeof(str_temp));
printf("sizeof str_nopacked = %d/n", sizeof(str_nopacked));
return 0;
}
编译运行:
[root@localhost root]# ./packedtest
sizeof str = 5
sizeof str_struct = 5
sizeof str_temp = 6
sizeof str_nopacked = 6
--------------------------------------------------------------------
GNU C的一大特色就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。
__attribute__书写特征是:__attribute__前后都有两个下划线,并且后面会紧跟一对括弧,括弧里面是相应的__attribute__参数。
__attribute__语法格式为:
__attribute__ ((attribute-list))
其位置约束:放于声明的尾部“;”之前。
函数属性(Function Attribute):函数属性可以帮助开发者把一些特性添加到函数声明中,从而可以使编译器在错误检查方面的功能更强大。__attribute__机制也很容易同非GNU应用程序做到兼容之功效。
GNU CC需要使用 –Wall编译器来击活该功能,这是控制警告信息的一个很好的方式。
packed属性:使用该属性可以使得变量或者结构体成员使用最小的对齐方式,即对变量是一字节对齐,对域(field)是位对齐。
详细解决方案
关于linux内核中的__attribute__ ((packed))
热度:48 发布时间:2024-01-21 13:34:07.0
相关解决方案
- linux+tomcat部署JSP项目有关问题,找不到jar依赖包
- linux 上log4j使用,日志输出的配置
- linux 上Tomcat不解析.war包
- 使用moto sdk 6.2 for linux 模拟器调试 蓝牙程序时的有关问题
- 文件下传到系统中后,没有执行权限(linux)
- linux 命令 求解解决方法
- jre-7u6-linux-i586.tar.gz 如何没有 bin/javac
- Jexus web server for linux V3.6版正式公布
- Linux,Java,net国内市场的占有率怎么
- Linux 和windows中文乱码解决办法
- 哪位高手知道 Oracle for Linux 在哪儿下载呀
- linux 上安装oracle10g
- linux 下安装oracle10g,该如何解决
- oralce 11g 32位 for linux RH5 安装神奇有关问题
- linux g_serial 的模块装配!
- 求真相,linux &arm 和c\c++有关的开发真的如何悲剧吗
- linux 如何运行c程序
- arm-linux-gcc下的字节对齐有关问题
- 好久没来CSDN了,散分,顺便说一句如何没有嵌入式开发(linux)
- linux下怎么使用arm-linux-gcc编译器
- 怪事【AT91RM9200+LINUX+PC6脚】
- linux+wifi+ap的一些有关问题
- linux 装置模型
- linux 有关问题
- linux 下汇编有关问题3,高人指教!
- linux 下汇编有关问题2,高人指教!
- linux 下汇编有关问题,高人指教!
- linux 下汇编有关问题,高人指教,初学,
- linux 下汇编有关问题4,高人指教!
- redhat5 linux 下汇编有关问题