Chinaunix首页 | 论坛 | 博客
  • 博客访问: 134149
  • 博文数量: 35
  • 博客积分: 45
  • 博客等级: 民兵
  • 技术积分: 180
  • 用 户 组: 普通用户
  • 注册时间: 2013-01-10 11:16
文章分类

全部博文(35)

文章存档

2016年(12)

2015年(10)

2014年(4)

2013年(9)

我的朋友

分类: C/C++

2014-12-17 15:12:06

自己工作中遇到的点滴,自己的理解(不一定正确),不定时更新

1、无符号数移位操作是逻辑移位,有符号数移位操作是算数移位,不指定一个类型(int short long  char long long)是有符号(signed)还是无符号(unsigned)的时候,不确定是什么类型,具体看编译器实现。

2、大括号()可将多个表达式合在一起,最后一个表达式的值可看做是返回值。

3、volatile作用防止编译器优化,所有的特殊用法都是由此衍生的。防止优化有两方面,其一防止编译器删除一些“它认为没用”却有用的语句,其二每次访问变量都访问真实的内存地址空间而不是缓存在寄存器中的值,也可以说对调用者来说它是“易变的”。好像也可以修饰函数来防止优化函数。

4、register提示编译器尽量分配寄存器而不是内存存放该变量,不在内存中自然不能取地址。

5、const 提示编译器该变量是常量,有代码修改它的值时会报错,但并不代表这个变量所在的内存就是不可变的,可与volatile一起用。

6、volatile、registerconst 等修饰符都是编译器级别的作用,而实际的内存的访问属性、cache跟它们没关系,这个要靠MMU等硬件级别来控制。

7、对齐是个跟当前系统(通过异常设定)、硬件架构(实际定位内存地址)相关的问题,在不确定当前环境处理方式或者编写移植性代码时不要将可能不对齐的内存强制转换为int等类型的指针变量再去引用。

8、溢出,对于可能会导致数值溢出的算数运算,应采取long long等范围较大的类型转换一下。

9、大小端字节序比特序,详见另一篇博文《
Byte and Bit Order Dissection

10、结构体对齐,按照最大的基本类型 地址对齐来算。

阅读(1013) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~