📄 subject_46551.htm
字号:
<p>
序号:46551 发表者:mwh 发表日期:2003-07-11 10:54:28
<br>主题:内存分配问题
<br>内容:关于内存分配问题:<BR> 我定义了一个结构如下,,<BR>typedef struct LinkBuf<BR>{<BR> char CommandType;<BR> char SendIndex;<BR> char ReceIndex;<BR> unsigned short serial;<BR> long int m_handle; <BR> char Content[256];<BR><BR>}LinkBuf;<BR>在程序中引用该结构指针,但是在跟踪过程中却发现内存分配情况如下:<BR> <BR> 0x00b96fdc commandtype<BR> 0x00b96fdd sendindex<BR> 0x00b96fde receindex<BR> 0x00b96fdf <BR> 0x00b96fe0 serial<BR> 0x00b96fe1<BR> 0x00b96fe2<BR> 0x00b96fe3<BR> 0x00b96fe4 m_handle<BR> 0x00b96fe5<BR> 0x00b96fe6<BR> 0x00b96fe7<BR> 0x00b96fe8 content <BR> <BR> 短整形占2个字节,long占4个字节,char占1个字节,为什么serial及m_handle之前会各多出1个及2个字节的空间,而不是连续分配了,如希望能够连续分配,我该怎么做,请各位高手指教
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:VChen 回复日期:2003-07-11 12:14:22
<br>内容:因为结构涉及到内存的对齐所以会多出一些空间;如果想连续分配可以在你的结构前面加入#pragma pack( 1 ),如下:<BR><BR>#pragma pack( 1 )<BR>typedef struct LinkBuf<BR>{<BR> char CommandType;<BR> char SendIndex;<BR> char ReceIndex;<BR> unsigned short serial;<BR> long int m_handle; <BR> char Content[256];<BR>}LinkBuf;<BR>#pragma pack( 8 )
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:tidy 回复日期:2003-07-11 15:27:49
<br>内容:pragma pack(1)<BR>typedef struct LinkBuf<BR>{<BR> char CommandType;<BR> char SendIndex;<BR> char ReceIndex;<BR> unsigned short serial;<BR> long int m_handle;<BR> char Content[256];<BR>}linkBuf;<BR>#pragma pack(8)<BR><BR><BR><BR>pragma pack 是个什么东东???为什么有那作用?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:VChen 回复日期:2003-07-11 15:57:13
<br>内容:#pragma pack(1)是使结构的以1个字节为单位进行字节对齐;<BR>#pragma pack(8)是使结构的以8个字节为单位进行字节对齐;<BR><BR>因为VC默认的是8个字节对齐,所以要还原。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:mwh 回复日期:2003-07-12 10:56:41
<br>内容:我想多知道一些关于内存对齐方面的知识,不知何处有关于此方面的资料
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:時間の痕跡 回复日期:2003-07-12 23:05:09
<br>内容:其实这是一些比较底层的东西,如果你想了解的话在一些教win32asm的书里面有提到。不过在这方面的书我见到的不多,《windows环境下32位汇编语言程序设计》这书比较好。不过如果你这是想了解一下“内存对齐方面的知识”就没有买这书的必要了,因为里面这是有提到(因为汇编这东西就要你什么都了解。^_^)过。专门的资料我还没有见到过。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -