易截截图软件、单文件、免安装、纯绿色、仅160KB

C 语言数据对齐

#include <stdio.h>    
struct Foo1
{
   char a;
   int  b;
   char c;
   int  d;
};
#pragma pack (2)
struct Foo2
{
   char a;
   int  b;
   char c;
   int  d;
};
#pragma pack ()
struct Foo3
{
   char a;
   char c;
   int  b;
   int  d;
};
struct Foo4
{
   char a;
   int  b;
   char c;
   int  d;
} __attribute__ ((__packed__));
int main(int argc, char **argv)
{
   printf("size of Foo1: %d ", sizeof(struct Foo1));
   printf("size of Foo2: %d ", sizeof(struct Foo2));
   printf("size of Foo3: %d ", sizeof(struct Foo3));
   printf("size of Foo4: %d ", sizeof(struct Foo4));
   return 0;
}
下面的小程序是关于数据对齐的一个试验,在我的 2.4 内核的 Linux 上运行结果如下:
size of Foo1: 16
size of Foo2: 12
size of Foo3: 12
size of Foo4: 10
1、 Foo1 未经过任何处理的,由于整型需要按 4 字节对齐,因此实际存储结果如下,占用 16 个字节空间

2、Foo2 通过 #pragma pack (2) ,将对齐方式改为 2 字节对齐,实际存储结果如下,占用 12 字节空间
3、 Foo3, 通过 #pragma pack (),又恢复到默认的 4 字节对齐方式,但是由于调整了变量的顺序,实际存储结果如下,占用 12 字节空间

4、Foo4, 通过 GCC 的 __packed__ 的扩展属性,禁止对齐,得到如下结果,占用空间 10 字节


相关文档:

经典C/C++面试题

1.介绍一下STL,详细说明STL如何实现vector。
Answer:
     STL (标准模版库,Standard Template Library)它由容器算法迭代器组成。
     STL有以下的一些优点:
     可以方便容易地实现搜索数据或对数据排序等一系列的算法;
 &nb ......

C盘转换为NTFS格式.

@ ECHO OFF
@ ECHO.
@ ECHO.                          Snlie
@ ECHO ---------------------------------------------------------------
@ ECHO NTFS格式是WinXP推荐使用的格式。转换 ......

【转】C变量的存储方式

C变量的存储方式-“静态存储”和“动态存储”      变量的存储方式可分为“静态存储”和“动态存储”两种。 静态存储变量通常是在变量定义时就分定存储单元并一直保持不变,直至整个程序结束。全局变量即属于此类存储方式。动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即 ......

C/C++是最主要的编程语言,这里列出了50名优秀网站

C/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码 。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C++源代码的网站。这不是一个完整的清单,您有建议可以联系我,我将欢迎您的建 议,以进一步加强这方面的清单。
1、http://snippets.dzone.com/tag/c/ --数以千 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号