[C language]一些零碎知识的解释

来源:互联网 发布:ubuntu打开超级终端 编辑:程序博客网 时间:2024/04/30 12:09

1、为什么需要边界对齐(特别是在结构体中)

参考链接:http://topic.csdn.net/u/20080306/15/408e814c-0e61-4a38-9f57-69c7804d3fed.html

成员对齐有一个重要的条件,即每个成员按自己的方式对齐.其对齐的规则是,每个成员按其类型的对齐参数(通常是这个类型的大小)和指定对齐参数(一般编译器默认是8字节)中较小的一个对齐.并且结构的长度必须为所用过的所有对齐参数的整数倍,不够就补空字节。

对齐的作用和原因
各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问 一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐.其他平台可能没有这种情况,但是最常见的是如果不按照适合其平台要求对 数据存放进行对齐,会在存取效率上带来损失。比如有些平台每次读都是从偶地址开始,如果一个int型(假设为32位系统)如果存放在偶地址开始的地方,那 么一个读周期就可以读出这32bit,而如果存放在奇地址开始的地方,就需要2个读周期,并对两次读出的结果的高低字节进行拼凑才能得到该32bit数据,显然在读取效率上下降很多。

2、FILE结构体

参考链接:http://zhidao.baidu.com/question/74043043.html

2.1、Turbo C中:

typedef struct  {        short           level;          /* fill/empty level of buffer */        unsigned        flags;          /* File status flags    */        char            fd;             /* File descriptor      */        unsigned char   hold;           /* Ungetc char if no buffer */        short           bsize;          /* Buffer size          */        unsigned char   *buffer;        /* Data transfer buffer */        unsigned char   *curp;          /* Current active pointer */        unsigned        istemp;         /* Temporary file indicator */        short           token;          /* Used for validity checking */}       FILE;                           /* This is the FILE object */


2.2、Visual C++中:

struct _iobuf {        char *_ptr;   //文件输入的下一个位置        int   _cnt;  //当前缓冲区的相对位置        char *_base;  //指基础位置(即是文件的其始位置)         int   _flag;  //文件标志        int   _file;   //文件的有效性验证        int   _charbuf;  //检查缓冲区状况,如果无缓冲区则不读取        int   _bufsiz;   //文件的大小        char *_tmpfname;  //临时文件名        };typedef struct _iobuf FILE;

原创粉丝点击