社区
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__做什么用?
...全文
540
25
打赏
收藏
请问C语言中__ATTRIBUTE_PACK__做什么用?
例如: struct _pub { unsigned char data[PUB_LEN]; }__ATTRIBUTE_PACK__; typedef struct _pub PUB; 其中的__ATTRIBUTE_PACK__做什么用?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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语言
中
的内存对齐:原理、实践与性能优化
实现内存对齐的方法有几种,包括使用编译器指令#pragma
pack
、手动填充字节以及使用GCC编译器特有的__
attribute
__((aligned(n)))属性。通过这些方法,程序员可以控制数据的存储方式以满足特定的对齐要求。 在实际...
C语言
数据的字节对齐
###
C语言
中
的数据字节对齐详解 #### 字节对齐的概念 字节对齐(Byte Alignment)是指在计算机内存
中
存储数据时的一种优化技术,它确保特定类型的变量存储在其类型的自然边界上,以提高处理器访问这些数据的速度。...
C_variable_align_summary.zip___align___align c_align_c __alig
在
C语言
中
,数据对齐(Data Alignment)是一种优化策略,用于提高程序执行效率和内存访问速度。数据对齐指的是变量在内存
中
的存储位置必须满足特定的边界要求,通常是CPU和内存系统的字大小。理解并掌握
C语言
中
的...
字节对齐的详细解析于实例分析
字节对齐是一种编程策略,主要应用于
C语言
和C++
中
,目的是为了提高程序执行的效率和内存访问的性能。当结构体
中
的成员变量在内存
中
存储时,编译器会根据成员变量的类型和系统架构自动进行字节对齐,确保每个变量都能...
可移植性C编码指南3.doc
使用`#pragma
pack
`或`__
attribute
__((
pack
ed))`来控制对齐,但要谨慎,因为这可能影响性能。 3.2.8 ... (这部分内容可能包含更多关于结构体、指针和其他
C语言
特性的讨论) 总的来说,可移植性C编码的关键在于避免...
C语言
70,040
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章