免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2208 | 回复: 5
打印 上一主题 下一主题

请教一个pragma pack (1) 在HP 上的问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-02-29 11:34 |只看该作者 |倒序浏览
%cat p.c

#pragma pack (1)
struct  vv
{
    int a;
    char b;

};

int main (int argc, char *argv[])
{
      printf ("sizeof(struct vv) is %d \n",  sizeof(struct vv));
      return 0;
}

当在HP server上编译,运行时,pragma 没有起作用,sizeof 的结果是8.
server info: HP-UX cdhp25 B.11.11 U 9000/785 2016176004 unlimited-user license
gcc version : gcc (GCC) 3.3.2

% gcc  p.c
% ./a.out
sizeof(struct vv) is 8


当在Solarias server上编译,运行时,pragma 有作用,sizeof 的结果是5.
server info:
gcc version : gcc (GCC) 3.4.2
% gcc p.c
% ./a.out
sizeof(struct vv) is 5

虽然gcc在两个server上的版本有一些差异,但是我觉得这个差异不至于导致这个问题,我的理解pragma 是ANSI的一部分,为什么gcc在HP上的版本似乎就不支持这个功能?
望格纹有经验的大虾赐教
我在google上查了查,没有得到有价值的信息。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2008-02-29 11:45 |只看该作者
莫非你连总线错误都不在乎?

论坛徽章:
0
3 [报告]
发表于 2008-02-29 16:57 |只看该作者

回复 #2 cjaizss 的帖子

你说的总线错误是指编译错误,还是运行错误?
我用gcc在两个平台下编译和运行本身都没有问题, 就是在HP上的运行结果不是我所期望的。

论坛徽章:
0
4 [报告]
发表于 2008-02-29 20:28 |只看该作者
总线错误是运行错误
一般是因为未对齐的内存访问
比如4个字节对齐的系统中 你想往第5个地址写一个int
估计HP上的gcc认为这不应该是程序员想的问题

论坛徽章:
0
5 [报告]
发表于 2008-03-03 18:51 |只看该作者

回复 #1 keenty 的帖子

hp下面字节对齐的是#pragma pack  1
测试在HP-UX hp4440 B.11.11 U 9000/800下输出为5

论坛徽章:
0
6 [报告]
发表于 2008-03-05 09:41 |只看该作者

回复 #5 firebirdgo 的帖子

我也在网上查询到了这个方法,并得到了验证,但是#pragma pack 1 的语法和标准的#pragma pack(1)写法不同,而且对前者要用cc而不是gcc, 另外cc对函数的定义要求使用古老的C函数接口,如
void   f(a, b )                                                                                                              
int a;                                                                                                                       
int b;                                                                                                                       
{}
我的任务是将一个现有的工程移植到HP的平台上,  如果使用#pragma pack 1 方式,要改很多地方,很麻烦, 我就是想找到一个简单有效的方法进行移植, 当然,如果实在没有什么好办法, 就只有作大量的手工改动(用#pragma pack 1方式)来实现了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP