阅读:2009回复:13
关于字节对齐问题
那位给详细讲一下在驱动中的字节对齐问题,由于字节对齐的问题我的程序出的问题让我搞了两天,主要是一开始没有想到,所以有经验的给仔细讲讲可否??
|
|
|
沙发#
发布于:2002-11-12 18:39
是定义结构时出现的问题吗?试试
#pragma pack |
|
板凳#
发布于:2002-11-12 20:38
在定义结构的前面加上
#pragma pack(1)表示字节对齐 在定义结构结束后加上 #pragma pack() |
|
地板#
发布于:2002-11-12 21:45
在定义结构的前面加上 否则 struct _OK { char a, long b, } OK; 很可能是8个字节。 :o |
|
|
地下室#
发布于:2002-11-12 21:52
这个我会的,但是对字节对齐的意义不是很清楚,因为字节对齐这个问题对我的VXD影响很大,而且有一部分不是我写的,用的是4字节对齐,如果我在编译的选项里加上zp4,很多函数都出错误了,(我的打印的信息都不见了,就象没有运行到那些函数一样),如果一字节对齐有会在其他的地方引起内存错误
|
|
|
5楼#
发布于:2002-11-12 23:20
#pragma pack()这个语句用在。c里有用么??我记得在c里面是只对声明的结构和联合其作用的,对定义是不起作用的,可是原先的那个程序都是在。c里面用的#pragma pack(4),
|
|
|
6楼#
发布于:2002-11-13 09:33
大家都说一下啊,
|
|
|
7楼#
发布于:2002-11-13 09:44
这个我会的,但是对字节对齐的意义不是很清楚,因为字节对齐这个问题对我的VXD影响很大,而且有一部分不是我写的,用的是4字节对齐,如果我在编译的选项里加上zp4,很多函数都出错误了,(我的打印的信息都不见了,就象没有运行到那些函数一样),如果一字节对齐有会在其他的地方引起内存错误 前面的哥们已经说的很清楚。 如果对齐不对的话, 你用数据结构中取到的东西会不对。例如: typedef struct _mytype { char a; PNDIS_PACKET b; }mytype; mytype mytype1; mytype1->b得到的指针值可能会不正确, 这种情况下发生任何事情都是有可能的。 |
|
|
8楼#
发布于:2002-11-13 09:51
这个我知道的啊,我迷惑的是下面的这个:
原先的那部分程序都是在*.c文件头部,include的前面用的#pragma pack(4),然后在include完所有的头文件以后用#pragma hdrstop, 就是这样: pragma pack(4) #inculude\"\" ........ #pragma hdrstop 这两个连在一起用有什么作用??而且这样用#pragma pack(4)有作用么?? |
|
|
9楼#
发布于:2002-11-13 10:09
这个我知道的啊,我迷惑的是下面的这个: 原先的那部分程序都是在*.c文件头部,include的前面用的#pragma pack(4),然后在include完所有的头文件以后用#pragma hdrstop, 就是这样: pragma pack(4) #inculude\"\" ........ #pragma hdrstop 这两个连在一起用有什么作用??而且这样用#pragma pack(4)有作用么?? [/quote] BCB里常用的。 #pragma hdrstop是告诉编译器,precompile到这里结束可以缓冲进CSM文件了。一般Pack的用法是 #pragma pack(push)保存当前字对齐值。 #pragma pack(1)设置当前字对齐值 #pragma pack(pop)还原上次保存的值。 |
|
|
10楼#
发布于:2002-11-13 10:14
pragma pack(4)
#inculude\"\" ........ BCB里这样设置以后是什么作用?在那些头文件里声明的结构就都按照4字节对齐了??我在MSDN里面怎么也看不出来这种用发:( |
|
|
11楼#
发布于:2002-11-13 14:37
该死的Break due to General protection fault(0Dh)
Break due to page fault(0Dh) 这类错误后面的那些数字有什么意义么? |
|
|
12楼#
发布于:2002-11-13 15:05
该死的Break due to General protection fault(0Dh) 中断13,一般性保护错误 |
|
|
13楼#
发布于:2002-11-13 15:39
page fault(0EH)呢?后面还有一个fault=XXXX,没有见到这方面的资料,
|
|
|