社区
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__做什么用?
...全文
516
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语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章