⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_46551.htm

📁 vc
💻 HTM
字号:
<p>
序号:46551 发表者:mwh 发表日期:2003-07-11 10:54:28
<br>主题:内存分配问题
<br>内容:关于内存分配问题:<BR>&nbsp;&nbsp;&nbsp;&nbsp;我定义了一个结构如下,,<BR>typedef&nbsp;&nbsp;struct LinkBuf<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CommandType;<BR>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendIndex;<BR>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReceIndex;<BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned short&nbsp;&nbsp;serial;<BR>&nbsp;&nbsp;&nbsp;&nbsp;long int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_handle; <BR>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Content[256];<BR><BR>}LinkBuf;<BR>在程序中引用该结构指针,但是在跟踪过程中却发现内存分配情况如下:<BR> <BR> 0x00b96fdc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;commandtype<BR> 0x00b96fdd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendindex<BR> 0x00b96fde&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;receindex<BR> 0x00b96fdf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR> 0x00b96fe0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serial<BR> 0x00b96fe1<BR> 0x00b96fe2<BR> 0x00b96fe3<BR> 0x00b96fe4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_handle<BR> 0x00b96fe5<BR> 0x00b96fe6<BR> 0x00b96fe7<BR> 0x00b96fe8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content&nbsp;&nbsp;<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&nbsp;&nbsp;struct LinkBuf<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CommandType;<BR>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendIndex;<BR>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReceIndex;<BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned short&nbsp;&nbsp;serial;<BR>&nbsp;&nbsp;&nbsp;&nbsp;long int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_handle; <BR>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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>&nbsp;&nbsp;&nbsp;&nbsp; char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CommandType;<BR>&nbsp;&nbsp;&nbsp;&nbsp; char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendIndex;<BR>&nbsp;&nbsp;&nbsp;&nbsp; char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReceIndex;<BR>&nbsp;&nbsp;&nbsp;&nbsp; unsigned short&nbsp;&nbsp;serial;<BR>&nbsp;&nbsp;&nbsp;&nbsp; long int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_handle;<BR>&nbsp;&nbsp;&nbsp;&nbsp; char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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 + -