<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>《也谈内存对齐》的评论</title>
	<atom:link href="http://tonybai.com/2005/08/09/also-talk-about-memory-alignment/feed/" rel="self" type="application/rss+xml" />
	<link>https://tonybai.com/2005/08/09/also-talk-about-memory-alignment/</link>
	<description>一个程序员的心路历程</description>
	<lastBuildDate>Wed, 25 Mar 2026 09:21:20 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>作者：test</title>
		<link>https://tonybai.com/2005/08/09/also-talk-about-memory-alignment/#comment-18</link>
		<dc:creator>test</dc:creator>
		<pubDate>Mon, 14 Mar 2011 14:12:30 +0000</pubDate>
		<guid isPermaLink="false">http://tonybai.com/2005/08/09/%e4%b9%9f%e8%b0%88%e5%86%85%e5%ad%98%e5%af%b9%e9%bd%90/#comment-18</guid>
		<description>经过一个周末的倒腾，终于弄清楚了，之前把pack作为package了，从而导致了自己设定这个对齐参数没起作用，现在总算是明白了。我也为此写了篇博客，欢迎博主指教。http://www.cppblog.com/deercoder/archive/2011/03/13/141717.html

最后感谢博主的好文，学的东西不少~</description>
		<content:encoded><![CDATA[<p>经过一个周末的倒腾，终于弄清楚了，之前把pack作为package了，从而导致了自己设定这个对齐参数没起作用，现在总算是明白了。我也为此写了篇博客，欢迎博主指教。http://www.cppblog.com/deercoder/archive/2011/03/13/141717.html</p>
<p>最后感谢博主的好文，学的东西不少~</p>
]]></content:encoded>
	</item>
	<item>
		<title>作者：test</title>
		<link>https://tonybai.com/2005/08/09/also-talk-about-memory-alignment/#comment-19</link>
		<dc:creator>test</dc:creator>
		<pubDate>Sat, 12 Mar 2011 20:35:45 +0000</pubDate>
		<guid isPermaLink="false">http://tonybai.com/2005/08/09/%e4%b9%9f%e8%b0%88%e5%86%85%e5%ad%98%e5%af%b9%e9%bd%90/#comment-19</guid>
		<description>博主你好：对于上面的一个例子：
struct test{
	int a;
	double b;
	char c;
};
不论是在GCC还是DEV c++上面，我的结果都是24，按照对齐的来讲，不会得到16的结果啊。我侧过机子是sizeof(int) = 4，那么按照上面的方法得到16就是不对啊~求解释。。</description>
		<content:encoded><![CDATA[<p>博主你好：对于上面的一个例子：<br />
struct test{<br />
	int a;<br />
	double b;<br />
	char c;<br />
};<br />
不论是在GCC还是DEV c++上面，我的结果都是24，按照对齐的来讲，不会得到16的结果啊。我侧过机子是sizeof(int) = 4，那么按照上面的方法得到16就是不对啊~求解释。。</p>
]]></content:encoded>
	</item>
	<item>
		<title>作者：xuzhonghua</title>
		<link>https://tonybai.com/2005/08/09/also-talk-about-memory-alignment/#comment-20</link>
		<dc:creator>xuzhonghua</dc:creator>
		<pubDate>Tue, 25 Nov 2008 00:16:17 +0000</pubDate>
		<guid isPermaLink="false">http://tonybai.com/2005/08/09/%e4%b9%9f%e8%b0%88%e5%86%85%e5%ad%98%e5%af%b9%e9%bd%90/#comment-20</guid>
		<description>其实我觉得可以按照表格的思想来理解内存对齐
首先是数据成员对齐：假设下面这个结构体：
struct a
{
int a;
double b;
char c;
}

因sizeof（double） = 8；所以我们可以想象一个具有8列的表格（行数不具体），这样第一个数据先放到表格的第一行的第一列到第四列（因为a是int型数据，占四个字节，表格中的每一列理解为一个字节），则第一行还剩4列(即四个字节）没用；第二个数因为是double型，占8字节，不能再放到第一行中了，只能放到第二行中，刚好把第二行的8列占满；第三个书自然就放到第三行的第一列了，此时这个结构体总共占了三行，每行8个字节，即3X8=24个字节.这是我理解的内存对齐，如果有错，希望指出，呵呵......</description>
		<content:encoded><![CDATA[<p>其实我觉得可以按照表格的思想来理解内存对齐<br />
首先是数据成员对齐：假设下面这个结构体：<br />
struct a<br />
{<br />
int a;<br />
double b;<br />
char c;<br />
}</p>
<p>因sizeof（double） = 8；所以我们可以想象一个具有8列的表格（行数不具体），这样第一个数据先放到表格的第一行的第一列到第四列（因为a是int型数据，占四个字节，表格中的每一列理解为一个字节），则第一行还剩4列(即四个字节）没用；第二个数因为是double型，占8字节，不能再放到第一行中了，只能放到第二行中，刚好把第二行的8列占满；第三个书自然就放到第三行的第一列了，此时这个结构体总共占了三行，每行8个字节，即3X8=24个字节.这是我理解的内存对齐，如果有错，希望指出，呵呵&#8230;&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>作者：土土</title>
		<link>https://tonybai.com/2005/08/09/also-talk-about-memory-alignment/#comment-21</link>
		<dc:creator>土土</dc:creator>
		<pubDate>Wed, 30 Apr 2008 17:27:57 +0000</pubDate>
		<guid isPermaLink="false">http://tonybai.com/2005/08/09/%e4%b9%9f%e8%b0%88%e5%86%85%e5%ad%98%e5%af%b9%e9%bd%90/#comment-21</guid>
		<description>#pragma pack(8)
struct a
{
int a;
double b;
char c;
}
我用GCC(32位机器)结果是16.并不是你说的24.但是用VC(64位机器)的话,同样的代码是24</description>
		<content:encoded><![CDATA[<p>#pragma pack(8)<br />
struct a<br />
{<br />
int a;<br />
double b;<br />
char c;<br />
}<br />
我用GCC(32位机器)结果是16.并不是你说的24.但是用VC(64位机器)的话,同样的代码是24</p>
]]></content:encoded>
	</item>
	<item>
		<title>作者：limohua</title>
		<link>https://tonybai.com/2005/08/09/also-talk-about-memory-alignment/#comment-22</link>
		<dc:creator>limohua</dc:creator>
		<pubDate>Thu, 13 Mar 2008 21:12:58 +0000</pubDate>
		<guid isPermaLink="false">http://tonybai.com/2005/08/09/%e4%b9%9f%e8%b0%88%e5%86%85%e5%ad%98%e5%af%b9%e9%bd%90/#comment-22</guid>
		<description>谢谢，忘记了还有“对齐系数”这个东西，目前试过，好像aix,linux平台的对齐系数都是8的，只有sunos是4的，不知道hp的机器的对齐系数是不是也是8的？？</description>
		<content:encoded><![CDATA[<p>谢谢，忘记了还有“对齐系数”这个东西，目前试过，好像aix,linux平台的对齐系数都是8的，只有sunos是4的，不知道hp的机器的对齐系数是不是也是8的？？</p>
]]></content:encoded>
	</item>
	<item>
		<title>作者：limohua</title>
		<link>https://tonybai.com/2005/08/09/also-talk-about-memory-alignment/#comment-23</link>
		<dc:creator>limohua</dc:creator>
		<pubDate>Thu, 13 Mar 2008 17:46:29 +0000</pubDate>
		<guid isPermaLink="false">http://tonybai.com/2005/08/09/%e4%b9%9f%e8%b0%88%e5%86%85%e5%ad%98%e5%af%b9%e9%bd%90/#comment-23</guid>
		<description>struct s1{

        char a;

        double c;

        double  b;

 }s1;

这个结构体在sunos上面，char是按8位对齐的，但是在aix上面却是按4对齐的，总长度sunos上是24，而aix上面是20，这是为什么了，</description>
		<content:encoded><![CDATA[<p>struct s1{</p>
<p>        char a;</p>
<p>        double c;</p>
<p>        double  b;</p>
<p> }s1;</p>
<p>这个结构体在sunos上面，char是按8位对齐的，但是在aix上面却是按4对齐的，总长度sunos上是24，而aix上面是20，这是为什么了，</p>
]]></content:encoded>
	</item>
</channel>
</rss>
