当前位置:  技术问答>linux和unix

g++结构对齐请教???

    来源: 互联网  发布时间:2016-05-06

    本文导语:  我想8字节对齐,用如下伪指令设置:#pragma pack(8),好像无效,还是4字节对齐。请到手指点一下,郁闷。源码入下: #pragma pack(8) struct AAA { char chX1; int nX2; float fX3; double  dX4; char    chX5; }; struct AAA aaa; #pragma...

我想8字节对齐,用如下伪指令设置:#pragma pack(8),好像无效,还是4字节对齐。请到手指点一下,郁闷。源码入下:

#pragma pack(8)
struct AAA
{
char chX1;
int nX2;
float fX3;
double  dX4;
char    chX5;
};
struct AAA aaa;
#pragma pack()

结构大小还是24.如果是8字节对齐,应该是32啊。

|
1楼说的基本上正确,但是对于数据成员超过CPU字长的数据成员来说,各个编译器有自己的做法。例如
struct A
{
char a;
double b;
};
在VC上按照1楼说的sizeof为16,但是在gcc上double却按照4个字节对齐,也就是说尽管#pragma pack(8),double仍然从偏移4开始,sizeof为12,我不懂这里的原因,可能是因为CPU字长为32位,double按照4字节和8字节对齐没有任何区别吧

|
struct   AAA
{
char chX1;               // min{1, 8} = 1, 存放在 000000 字节
int nX2;                 // min{4, 8} = 4, 存放在 000004 -- 000007 字节
float fX3;               // min{4, 8} = 8, 存放在 000008 -- 000011 字节
double     dX4;          // min{8, 8} = 8, 存放在 000016 -- 000023 字节
char         chX5;       // min{1, 8} = 1, 存放在 000024 字节
};
struct   AAA   aaa; 

// 参考 http://www.cadcaecam.com/forum/read.php?tid=10454
#pragma pack规定的对齐长度,实际使用的规则是:
结构,联合,或者类的数据成员,第一个放在偏移为0的地方,以后每个数据成员的对齐,按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。
也就是说,当#pragma pack的值等于或超过所有数据成员长度的时候,这个值的大小将不产生任何效果。
而结构整体的对齐,则按照结构体中最大的数据成员 和 #pragma pack指定值 之间,较小的那个进行。

|
linux下g++也是16呀

    
 
 

您可能感兴趣的文章:

  • 用g++开发,怎么设置结构(struct)1字节对齐?
  • struct 结构内存对齐问题.
  • unix下,如何使得结构按1字节进行内存对齐?
  • Solaris下 C 语言编译时结构体成员对齐问题,请教!急!先谢了!
  • 请教struct sembuf的结构是怎样,急!急!急!!!!!!!!
  • 请教redhat9下如何查看系统定义的结构的帮助文档
  • 请教:如何将SQLSERVER数据库中所有表结构导出???
  • 请教JAVA中的数据结构
  • 请教linux驱动复杂,庞大的结构
  • 请教:关于c语言结构的问题!
  • 请教各位,数据结构在工程中到底有什么应用呢
  • 请教:请问java中存放数据库中的记录,用什么数据结构?(hashtable?vector?还是别的?)
  • 请教高手:在基于Java的三层分布式结构应用中的打印的解决方案(套打)
  • 请教c语言结构体嵌套问题。field `atItem' has incomplete type
  • 写一个方法,向它传递一个对象,循环打印出对象层次结构中的所有类?thinking in java里面的一个习题不知道如何做请教高手?
  • 初学:请教下linux编程时怎样方便查找函数原型和结构体的
  • 请教:在linux下如何为一个结构体分配空间?语句该怎么写?
  • 斑竹新上任,请教一个程序结构问题,捧场......
  • linux下的select函数以及fd_set结构体有人会用吗?我有点小问题想请教一下。
  • 菜鸟请教--关于指向结构体指针的赋值
  • 请教下大家:向一块arm结构的板子移植linux内核的过程和方法
  • 请教使用JList JComboBox JTree(这个不知道是不是这个名字 反正是树型结构)的用法
  • 请教结构体定义--LINUX驱动程序中语句
  • 新手请教高手在linux上用c写结构体时是不是有大小限制?如何解决?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • <<大话数据结构>>中冒泡排序算法改进
  • 请问:在用proc方式往数据库插入数据时,我能不能定义一个结构体,它与表的每一项对应,将结构体赋好值后,再只将这个结构体插入表中,这行不行啊?
  • 基于Key-Value的NOSQL数据库Redis的数据结构及常用相关命令介绍
  • 全局结构体变量和全局结构体指针变量
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • 《arm体系结构结构与编程》书如何
  • 数据结构:图(有向图,无向图),在Python中的表示和实现代码示例
  • file结构和inode结构
  • mysql 命令大全及导入导出表结构或数据
  • 《莱昂氏UNIX源代码分析》中有一种结构体声明没有结构体名
  • 关于学籍管理系统B/S结构实现的结构问题
  • GCC 编译问题: 结构A中有个成员结构B??
  • 强人,linux下驱动相关数据结构和usb设备数据结构之间的功能分析
  • 谁能告诉我EJB的体系结构有哪些,这些体系结构的优缺点如何,万分感谢!
  • 协议的设计一般采用结构体进行数据打包,在协议设计的结构体中能不能使用指针 ?
  • struct __una_u16结构是什么结构.
  • GNU汇编fill填充一个数据结构使得另一个数据结构全部清零
  • 高手帮帮忙!vi中如何实现跳转到任意结构体或函数的声明处,包括系统库中声明的函数和数据结构?
  • 请教:如何将SQLSERVER数据库中所有表结构导出??? iis7站长之家
  • 关于客户服务器结构与浏览器服务器结构编程的比较
  • 有一个win32的结构体,大伙看看能否转换成linux下的基本等价的结构体?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3