嵌入式笔记——关键字

1、volatile

  1. 中断服务程序中为其他程序服务的变量用volatile。
    当变量触发某中断发生修改后,而编译器判断主函数没有对变量进行修改,可能只会执行一次内存对寄存器的读操作,后面只会对该寄存器副本进行读取,导致中断操作形成短路
  2. 多任务环境下的多任务操作,用volatile
    在线程A下,变量会被编译器写入到一个寄存器副本,之后再读取将只会从该寄存器副本读取。在内存变量或寄存器变量在其他线程操作下变化,线程A使用变量仍然从该寄存器副本读取导致与实际值不一致
  3. 存储器映射的硬件寄存器需要volatile
    编译器会对指令进行优化,如对寄存器写1、写2、写3。编译器会省略写1、写2,直接写3,然而指令这么些有实际意义,使用volatile,不会对其进行优化

2、static

  1. 被static修饰的变量,只会初始化一次,存放在静态区,被其他函数调用,不会更改其属性
  2. 在多次函数调用中,函数使用完静态变量,不会释放其内存,其他函数仍然读取该静态区值
  3. 被声明的变量或函数,作用域为声明处到文件末之间可以使用

3、extern

声明的函数或变量可以被其他文件访问

4、const

const作用

  1. 声明变量只读,保护不被修改
  2. const修饰的变量只有一份拷贝,只分配一次内存
  3. 提高效率,编译器不为普通const分配内存,存在符号表,使其成为编译器的常量

const使用

  1. 编译器把const变量替换成对应的值
  2. const修饰引用,引用的变量不能修改
  3. const和指针
    const int* p=&a:常量指针。这是个指针,不过指向的是常量。指针是变量,可以指向其他地址
    int* const p=&a:指针常量。这是个常量,不过是指针,因为这个指针是常量,不能被赋值

5. new/delete和malloc/free

  1. new/delete是C++的操作符,而malloc/free是C中的函数。
  2. new进行两步,一为分配内存,二为调用类的构造函数
    delete进行两步,一为调用类的析构函数,二为释放内存
    malloc和free只是分配和释放内存
  3. new建立的是对象,返回带类型的指针,malloc只是内存,返回void指针
    new通过对象成员访问内存,malloc可以直接访问内存

6. strlen和sizeof

srelen:字符串长度,任何一个字符串末尾隐藏一个“\0",字符串结束的标志
sizeof:一个运算符,计算所占空间字节的大小
srelen(“/0”)=0
sizeof(“/0”)=2——/0为一个字节,"“会隐藏一个/0,所以”/0"实际上有2个/0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值