笔试题(6)

1 、static 的用法(定义和用途)

1)用 static 修饰局部变量:使其变为静态存 储方式(静态数据区),那么这个局部变量在函 数执行完成之 后不会被释放,而是继续保留在内存中。

2)用 static 修饰全局变量:使其只在本文件 内部有效,而其他文件不可连接或引用该变量。

3)用 static 修饰函数:对函数的连接方式产 生影响,使得函数只在本文件内部有效,对其 他文件是不可 见的(这一点在大工程中很重要很重要,避免 很多麻烦,很常见)。这样的函数又叫作静态 函数。使用 静态函数的好处是,不用担心与其他文件的同名函数产生干扰,另外也是对函数本身的一种 保护机制。

2、const 的用法(定义和用途)

const 主要用来修饰变量、函数形参和类成员 函数:

1)用 const 修饰常量:定义时就初始化,以 后不能更改。

2)用 const 修饰形参:func(const int a){}; 该形参在函数里不能改变

3)用 const 修饰类成员函数:该函数对成员 变量只能进行只读操作,就是 const 类成员函 数是不能修改 成员变量的数值的。 被 const 修饰的东西都受到强制保护,可以预 防意外的变动,能提高程序的健壮性。

3、volatile 作用和用法

一个定义为 volatile 的变量是说这变量可能 会被意想不到地改变,这样,编译器就不会去 假设这个变量的 值了。精确地说就是,优化器在用到这个变量 时必须每次都小心地重新读取这个变量在内 存中的值,而 不是使用保存在寄存器里的备份(虽然读写寄 存器比读写内存快)。 回答不出这个问题的人是不会被雇佣的。这是 区分 C 程序员和嵌入式系统程序员的最基本的 问题。搞嵌 入式的家伙们经常同硬件、中断、RTOS 等等打 交道,所有这些都要求用到 volatile 变量。 不懂得 volatile 的内容将会带来灾难。

以下几种情况都会用到 volatile:

1、并行设备的硬件寄存器(如:状态寄存器)

2、一个中断服务子程序中会访问到的非自动 变量

3、多线程应用中被几个任务共享的变量

4、经典的sizeof(struct)和 sizeof(union) 内存对齐

内存对齐作用:

1.平台原因(移植原因):不是所有的硬件平台 都能访问任意地址上的任意数据的;某些硬件 平台只能在某 些地址处取某些特定类型的数据,否则抛出硬 件异常。

2.性能原因:数据结构(尤其是栈)应该尽可能 地在自然边界上对齐。原因在于,为了访问未 对齐的内存, 处理器需要作两次内存访问;而对齐的内存访 问仅需要一次访问。

结构体 struct 内存对齐的 3 大规则:

1.对于结构体的各个成员,第一个成员的偏移 量是 0,排列在后面的成员其当前偏移量必须 是当前成员类型的整数倍;

2.结构体内所有数据成员各自内存对齐后,结 构体本身还要进行一次内存对齐,保证整个结 构体占用内存大小是结构体内最大数据成员 的最小整数倍;

3.如程序中有#pragma pack(n)预编译指令, 则所有成员对齐以 n 字节为准(即偏移量是 n 的整数倍),不再考虑当前类型以及最大结构 体内类型。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值