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

unix下,如何使得结构按1字节进行内存对齐?

    来源: 互联网  发布时间:2015-09-29

    本文导语:  我使用#pragma进行1字节的内存对齐,方法如下: #pragma (push,1) typedef struct _tagKeyComTime { WORD wYear; BYTE btMonth; BYTE btDay; BYTE btHour; BYTE btMinute; BYTE btSecond; } KeyComTime ; #pragma (pop) 打印: printf("sizeof(KeyComTime) = %d n"...

我使用#pragma进行1字节的内存对齐,方法如下:

#pragma (push,1)

typedef struct _tagKeyComTime
{
WORD wYear;
BYTE btMonth;
BYTE btDay;
BYTE btHour;
BYTE btMinute;
BYTE btSecond;
} KeyComTime ;

#pragma (pop)

打印:
printf("sizeof(KeyComTime) = %d n",sizeof(KeyComTime));
结果:
sizeof(KeyComTime) = 8
1字节进行内存对齐后,sizeof应该为7的啊!如何有效的使得结构按1字节进行内存对齐?


|
改成
#pragma pack ( 1)

typedef struct _tagKeyComTime
{
WORD wYear;
BYTE btMonth;
BYTE btDay;
BYTE btHour;
BYTE btMinute;
BYTE btSecond;
} KeyComTime ;

#pragma pack ( )

|
出现Bus error是你应用程序的问题,
与#pragma pack无关,我们都是这样加的,没有问题。自己检查吧。

|
强烈建议不要硬改对齐模式, 因为这样很容易会使某个整型数的起始地址处在奇地址上, 比如:
struct aa
{
char a __attribute__ ((packed));
int i;
};
这个里面的i就处在奇地址上(一般来说结构整体总是处在偶地址上的), 对于这样奇地址变量i, 在很多unix操作系统中(比如Sun 的Saloris)是不支持访问的, 你一旦读出或者给它赋值,就会发生“Bus error”错误,整个程序马上会崩溃的.

这个是和Windows编程有着很大的不同,大家可要注意了.....

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问如何使得SCO Unix用Telnet通过TCP/IP访问Novell,还有Novell4.11的Tenlnet服务如何开启?谢谢!
  • java命名空间java.util.regex类pattern的类成员方法: unix_lines定义及介绍
  • 刚刚接触Unix系统和Unix编程。急需Unix下多线程程序设计和网络Socket程序设计方面的资料。
  • unix/Linux下c++ boost thread库读写锁介绍
  • 关于UNIX的历史 : 1973年,K.Thompson和D.M.ritchie,用C改写UNIX。那么,在此之前,UNIX是用什么写的?
  • php将标准字符串格式时间转换成unix时间戳_strtotime
  • 没有unix系统我如何学习unix
  • php将unix时间戳转换成字符串时间函数(date)
  • unix盘哪里有下载的??哪里有比较好的unix论坛??万分感谢!!!!!!!!!
  • unix/Linux下c/c++ pthread库读写锁函数介绍
  • 急!装完unix5.06,再装win2000。重启后不能进unix.
  • UNIX特急!!!digital unix问题,请专家快来!!!
  • 操作系统 iis7站长之家
  • SCO UNIX 5.0用软盘启动之后无法启动UNIX
  • 散分!!unix 用户调查!!!你使用哪款unix
  • hp unix 和 sco unix的区别
  • 入门问题,我想向UNIX编程方向发展,单目前不会UNIX,我该如何做
  • 强烈建议将linux/Unix栏目放到“软件开发者”大类里面来。----Unix开发的人助威支持!!!
  • 现在那些unix比较流行?Linux和 Unix有 什么区别?
  • 小问题, Unix 如何建立一个文件 ,unix 文件有后缀名吗
  • 我想学习Unix,请高手给个下载网址,用linux来学习Unix差别大吗?
  • 请问各位unix大虾,哪有免费的unix下载?


  • 站内导航:


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

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

    浙ICP备11055608号-3