易截截图软件、单文件、免安装、纯绿色、仅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++语言学习总结(可以应对面试的题目)

C和C++语言学习总结(资料来自 <高质量C++/C 编程指南> 林锐博士 2001 年7 月24)
知识结构:
1、if,for,switch,goto
2、#define,const
3、文件拷贝的代码,动态生成内存,复合表达式,strcpy,memcpy,sizeof
4、函数参数传递,内存分配方式,内存错误表现,malloc与new区别
5、类重载、隐藏与覆盖区别,extern问题, ......

Windows Via C/C++: CreateThread函数

CreateThread函数
前面讲过,进程的主线程会在CreateProcess调用时自动创建。假如你要手工创建线程,你可以调用CreateThread函数:
HANDLE CreateThread(
PSECURITY_ATTRIBUTES psa,
DWORD cbStackSize,
PTHREAD_START_ROUTINE pfnStartAddr,
PVOID pvParam,
DWORD dwCreateFlags,
PDWORD pdwThreadID) ......

C盘转换为NTFS格式.cmd

@ ECHO OFF
@ ECHO.
@ ECHO.                               说   明
@ ECHO ----------------------------------------------------------------- ......

c指针的各种用法试验

#include <iostream.h>
void fun0(int* p)
{
int* a=new int[3];
*a=0;
*(a+1)=1;
*(a+2)=2;
p=a;
}
void fun1(int* &p)
{
int* a=new int[3];
*a=0;
*(a+1)=1;
*(a+2)=2;
p=a;
}
void fun2(int* p)
{
*p=0;
*(p+1)=1;
*(p+2)=2;
}
//warning:returning address of local va ......

C和C++语言学习总结 zz

知识结构:
1、if,for,switch,goto
2、#define,const
3、文件拷贝的代码,动态生成内存,复合表达式,strcpy,memcpy,sizeof
4、函数参数传递,内存分配方式,内存错误表现,malloc与new区别
5、类重载、隐藏与覆盖区别,extern问题,函数参数的缺省值问题,宏代码与内联函数区别
6、构造和析构的次序,String函数定义
具 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号