社区
C语言
帖子详情
请问C语言中__ATTRIBUTE_PACK__做什么用?
lwj_dxy
2005-06-29 03:16:47
例如:
struct _pub
{
unsigned char data[PUB_LEN];
}__ATTRIBUTE_PACK__;
typedef struct _pub PUB;
其中的__ATTRIBUTE_PACK__做什么用?
...全文
515
25
打赏
收藏
请问C语言中__ATTRIBUTE_PACK__做什么用?
例如: struct _pub { unsigned char data[PUB_LEN]; }__ATTRIBUTE_PACK__; typedef struct _pub PUB; 其中的__ATTRIBUTE_PACK__做什么用?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
25 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
慢慢来还不行么
2005-07-01
打赏
举报
回复
奇怪的问题,关注
hackingtruth
2005-07-01
打赏
举报
回复
可以用DEV-C++试试, 它用的编译器是GCC
hackingtruth
2005-07-01
打赏
举报
回复
是字节对齐, 看看下面的程序, 是别人写的:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
struct std {
int age;
char name[128];
char ch;
int score;
} __attribute__((packed)); //137
printf("sizeof std is %d\n",sizeof(struct std));
struct std_aligned {
int age; // 4
char name[128]; // 128
char ch; // 1 --> 136
int score; // 4
} __attribute__((aligned)); // 140
printf("sizeof std_aligned is %d\n",sizeof(struct std_aligned ));
struct std_aligned8 {
int age;
char name[128];
char ch;
int score;
} __attribute__((aligned(8)));
printf("sizeof std_aligned8 is %d\n",sizeof(struct std_aligned8 ));
struct std_aligned16 {
int age;
char name[128];
char ch;
int score;
} __attribute__((aligned(16)));
printf("sizeof std_aligned16 is %d\n",sizeof(struct std_aligned16 ));
struct std_aligned4 {
int age;
char name[128];
char ch;
int score;
} __attribute__((aligned(4)));
printf("sizeof std_aligned14 is %d\n",sizeof(struct std_aligned4 ));
getchar();
return 0;
}
lyphoon
2005-06-30
打赏
举报
回复
什么是字节对齐?
sharkhuang
2005-06-30
打赏
举报
回复
__ATTRIBUTE_PACK__ (1) 一字节对齐
踏岸寻柳
2005-06-30
打赏
举报
回复
没有起到任何作用。
outermarker
2005-06-30
打赏
举报
回复
估计是定义字节对齐的,楼主应该知道字节对齐的含义的吧?
whatsouta
2005-06-30
打赏
举报
回复
学习
代码之诗
2005-06-30
打赏
举报
回复
首先, __ATTRIBUTE_PACK__决不是C标准中有的, 一定某种编译器或平台所特有的东东,如果是个宏的话,甚至可能是某种特定的程序库引入的东东,在这种情况下,它可能是任何东西,可以通过在代码中搜索找到它的定义点来确定之.所以我猜它可能是 #pragma pack(n),这只是一种猜测.
至于#pragma pack(n)后面的n,是指对齐到n字节,n应当是2的整数次幂.比如1,2,4,8,16...
lwj_dxy
2005-06-30
打赏
举报
回复
__ATTRIBUTE_PACK__ (1)中的(1)代表什么意思?(8)有代表什么意思呢?
代码之诗
2005-06-29
打赏
举报
回复
它不可能是变量的,只能是别名或者宏,从其反复使用来看,不可能是别名了,应该是宏。从名字猜测,很可能是类似这样的宏:
#define __ATTRIBUTE_PACK__ \
#pragma pack(1)
用来指定对齐的。
bingbox_1984
2005-06-29
打赏
举报
回复
本来以为是变量的,不过看了你贴的程序,我估计应该是宏定义
laoshu131420
2005-06-29
打赏
举报
回复
怎么发贴啊
lwj_dxy
2005-06-29
打赏
举报
回复
刚才试了,用VC也可以编译通过
lwj_dxy
2005-06-29
打赏
举报
回复
用GCC可以编译通过的;
源代码只有一个文件test.c,全部源代码如下:
#define PUB_LEN 1024
#define __ATTRIBUTE_PACK__
struct _pub_A
{
unsigned char data[PUB_LEN];
}__ATTRIBUTE_PACK__;
typedef struct _pub_A PUB_A;
struct _pub_B
{
unsigned char data[PUB_LEN];
}__ATTRIBUTE_PACK__;
typedef struct _pub_B PUB_B;
struct _pub_C
{
unsigned char data[PUB_LEN];
}__ATTRIBUTE_PACK__;
typedef struct _pub_C PUB_C;
int main()
{
return 0;
}
用以下命令可以编译通过:
gcc -o test test.c
Rudy_zhuang
2005-06-29
打赏
举报
回复
#define PUB_LEN 1024
#define __ATTRIBUTE_PACK__
struct _pub_A
{
unsigned char data[PUB_LEN];
}__ATTRIBUTE_PACK__;
typedef struct _pub_A PUB_A;
struct _pub_B
{
unsigned char data[PUB_LEN];
}__ATTRIBUTE_PACK__;
typedef struct _pub_B PUB_B;
struct _pub_C
{
unsigned char data[PUB_LEN];
}__ATTRIBUTE_PACK__;
typedef struct _pub_C PUB_C;
这样可以,不过要找到真正定义__ATTRIBUTE_PACK__这个东西的地方才能明白它是什么意思
Rudy_zhuang
2005-06-29
打赏
举报
回复
我把你贴的源码用C编译器编译怎么着都通不过阿????????
hnsxldj
2005-06-29
打赏
举报
回复
应该是个宏定义吧。源代码中没有,就看看makefile里面有没有定义。
lwj_dxy
2005-06-29
打赏
举报
回复
请注意,源代码中类似如下定义:
#define PUB_LEN 1024
struct _pub_A
{
unsigned char data[PUB_LEN];
}__ATTRIBUTE_PACK__;
typedef struct _pub_A PUB_A;
struct _pub_B
{
unsigned char data[PUB_LEN];
}__ATTRIBUTE_PACK__;
typedef struct _pub_B PUB_B;
struct _pub_C
{
unsigned char data[PUB_LEN];
}__ATTRIBUTE_PACK__;
typedef struct _pub_C PUB_C;
在源代码中也没有__ATTRIBUTE_PACK__的宏定义;
在编译参数中也没有,大家说说它到底做什么用的?
Rudy_zhuang
2005-06-29
打赏
举报
回复
这不是很清楚了吗?
dongpy(51-->ARM)说的对阿,__ATTRIBUTE_PACK__就是一个结构体变量阿,
和struct _pub a,b,c;这样定义的a,b,c其实一样啊。
又不是用typedef来定义的。
加载更多回复(5)
C语言
中
的内存对齐:原理、实践与性能优化
内存对齐是
C语言
中
一个重要的概念,它影响着数据在内存
中
的存储方式和访问效率。通过深入理解内存对齐的原理和应用,程序员可以写出更高效、更可靠的代码,提高程序的性能和稳定性。在实际编程
中
,合理地利用内存对齐规则,能够帮助我们解决各种内存管理和数据结构设计
中
的难题,提高代码的质量和可维护性。希望本文能帮助读者更好地理解和掌握
C语言
中
的内存对齐技术。
C语言
数据的字节对齐
关于数据在内存
中
的存储,linux,wendows
中
结构体的字节对齐详细说明
C_variable_align_summary.zip___align___align c_align_c __alig
总结的
C语言
中
的数据对齐规则以及实例分析。比较完整的一个总结。
字节对齐的详细解析于实例分析
在
C语言
中
,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构
中
,编译器为结构的每个成员按其自然边界(alignment)分配空间。各个成员按照它们被声明的顺序在内存
中
顺序存储,第一个成员的地址和整个结构的地址相同。
可移植性C编码指南3.doc
可移植性C编码指南。1.1
C语言
进行产品开发的指南, 使产品可以以最小工作量进行移植。
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章