Chinaunix首页 | 论坛 | 博客
  • 博客访问: 207230
  • 博文数量: 80
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 824
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-12 21:40
个人简介

只有今天的埋头,才有明天的出头。

文章分类

全部博文(80)

文章存档

2014年(80)

我的朋友

分类: C/C++

2014-10-11 22:41:44

#pragma是编译器指示字,指示编译器完成特定动作,定义的指示字很多是编译器和操作系统特有的,#pragma在不同的编译器是不可移的:

1.预处理器将忽略它不认识的#pragma指令

2.两个不同的编译器可能以不同的方式解释同一条#pragma指令


用法:#pragma parameter

1#pragma message

messagevc特有,gcc将其忽略)参数在编译时输出信息到编译输出窗口中,可用于代码的版本控制。

2:内存对齐#pragma pack (number)


Why
内存对齐? cpu对内存的读取不是连续的,而是分块读取的,块的大小只能是124816字节,当读取操作的数据未对齐则需两次总线

周期来访问内存,因此性能会大打折扣,某些硬件只能从规定的地址处取某些特定类型的数据,否则抛出硬件异常。


struct
占用的内存大小:第一个成员始于0偏移处,每个成员按其类型大小和指定对齐参数中较小的一个进行对齐,结构体成员的对齐参数为其所

有成员使用的对齐参数的最大值,结构体总长度必须为所有对齐参数的整数倍。

#pragma pack4):gcc默认的

 

字节   pack 4                                    起始  大小     空了

2        4               Short                            0       2

                                                                                     2

4       4               Long                             4        4

----------------------------------------------------------------------------------8=2+2+4

1       4               char                              0        1

                                                                                      3

4       4              struc s                            4         8

                                                         

8      4                double                         12        8          

-----------------------------------------------------------------------------------20=1+3+8+8

 

阅读(1152) | 评论(0) | 转发(1) |
0

上一篇:#error与#line

下一篇:#与##

给主人留下些什么吧!~~