没有合适的资源?快使用搜索试试~ 我知道了~
Linux知识体系复习
资源推荐
资源详情
资源评论
一、概述
在这段时间的学习中,让我学习了很多之前没有学过的知识,之前在学校的时候只是学
过 51 跟 32 学的还一般,就简单做过几个比赛。在这段时间中让我对之前的学习有了更深的
理解,在大学期间也学过 C 语言跟数据结构还有什么面向对象设计啥的,也学了微机原理,
讲芯片的。这段时间的学习让我了解了一些 Linux 中好用的工具和 shell 命令。还有
makefile。然后学习了内核的执行单位,进程线程。线程是 Linux 借助 C 库实现的。本身没
有这个机制。其实它本身就是 C 和汇编写的说它有这个机制我感觉也没啥毛病。然后还有文
件的操作 IO 操作。一些进程线程间的通信机制。有名管道、无名管道、信号、信号量、
socket、共享内存、消息队列一共七种通信机制。 然后又学习了网络编程,以 TCP/IP 和 UDP/IP
为基础的通信协议。进程间的同步互斥机制、之后又进行了裸机开发。感觉除了分配 CPU
的时候其它机制还没 32 难度大呢。之后是 bootloader 最后又学了驱动,向下操作硬件。向
上提供接口。
二、C 语言
运算符和表达式:单算移关与,异或逻条赋,逗号来结尾。
static:本质=====延长变量或函数的生命周期,同时限制其作用域。
static 声明的全局变量、函数,仅当前文件内可用,其他文件不能引用。
static 在函数内部声明的内部静态变量,只需初始化一次。
而且变量存储在全局数据段(静态存储区)中,而不是栈中,其生命周期持续到程序退出。
extern 函数或变量的外部声明
对变量、函数而言,如果要在当前文件内引用外部变量或外部函数,
就需要在使用前用 extern 声明该变量,或者在头文件中用 extern 声明该变量;
volatile 易变的,不稳定的; 编译器警告提示字
防止编译器优化
如果使用了 volatile 修饰,那么保证每次取 a 的值都不是从缓存中取,而是从 a 所真正对
应的内存地址中取.
原因:由于访问寄存器的速度要快过 RAM,所以编译器一般都会作减少存取外部 RAM
的优化。
volatile 用在如下的几个地方: 中断----多任务共享资源----mmu 映射的寄存器
1、中断服务程序中修改的供其它程序检测的变量需要加 volatile;
2、多任务环境下各任务间共享的标志应该加 volatile;
3、存储器映射的硬件寄存器通常也要加 volatile 说明,因为每次对它的读写都可能由不
同意义;
attribute 机制--取消内存对齐 #pargram
struct 常用写法
5.结构体大小计算
gcc 编译器的对齐规则*******************4 字节对齐
位置偏移:
char(1byte) short(2byte) int(4byte) float(4byte) double(4byte)
相对偏移(相对于结构体首地址的偏移量):
结构体成员分配内存的规则 -----> 相对偏移 % 位置偏移 == 0 就可以分配,如果不为 0 则
补齐。
最后要求:结构体的总大小 % 最大的位置偏移 == 0,如果不为 0 则补齐
struct 内存对齐与取消内存对齐:
例:
#include<stdio.h>
struct A{
char a; //1
short b; //2
int c; //4
};
/*struct A size : 8*/
struct B{
char a; //1
int b; //4
short c; //2
};
/*struct B size : 12*/
struct C{
int a; //4 0 % 4 = 0
char b; //1 4 % 1 =0
double c; //8 5 % 8 =5 +3 4+1+8+3 = 16
short d; //2 16 % 2 =0 =18
18 % 4 =2 +2 = 20 内存对齐
}; //结构体的总大小 % 最大的位置偏移 == 0
/*struct C size : 20*/
struct D{
int a; //4
char b; //1
double c; //8
short d; //2
}__attribute__((__packed__)); //取消内存对齐 = 15
/*struct D size : 15 //取消了内存的对齐 */
int main(int argc, const char *argv[])
{
printf("struct A size : %d\n",sizeof(struct A));
printf("struct B size : %d\n",sizeof(struct B));
printf("struct C size : %d\n",sizeof(struct C));
printf("struct D size : %d\n",sizeof(struct D));
return 0;
}
fengjunhui@ubuntu:~$ gcc sizeofstruct.c
fengjunhui@ubuntu:~$ ./a.out
struct A size : 8
struct B size : 12
struct C size : 20
struct D size : 15 //取消了内存的对齐
结构体数组:
问:结构体变量与单一数据类型变量区别在哪里?
答:结构体类型的变量是由多个单一数据类型的变量组合在一起的,在使用的时候, 可以对
结构体内部的单一数据类型变量单独来访问。
问:数组也是多个成员组合在一起的,它与结构体变量的区别在哪里?
答:数组的成员全部是同类型,而结构体变量的成员可以是不同数据类型
union 共用体 --- 成员共享内存,修改成员就是覆盖原成员
union 共用体名{
成员
};
问:它与结构体区别在于什么地方?
答:
<1>结构体使用 struct 关键字来定义,共用体使用 union 关键字来定义
<2>结构体的每个成员都有单独的内存空间,而共用体的所有成员共用同一块内存(最大
的成员对应的内存)
<3>共用体变量与结构体变量访问成员的方法是一样
问:什么时候使用共用体?
答:如果需要使用的数据类型有很多,但是同一时刻只需要使用其中的一种数据类型
学生:小学生 中学生 大学生 研究生
例:
练习:验证 union 联合体(共用体)对成员的赋值是对原始数据的覆盖
#include<stdio.h>
union test{
unsigned int a;
unsigned short b;
unsigned char c;
};
int main(int argc, const char *argv[])
{
union test ut;
printf("ut :%p\n",&ut);
printf("ut.a :%p\n",&ut.a);
printf("ut.b :%p\n",&ut.b);
printf("ut.c :%p\n",&ut.c);
ut.a = 0x87654321;
printf("ut.a : %#x\n",ut.a);
ut.b = 0x8765;
printf("ut.b=0x8765 ut.a: %#x\n",ut.a);
ut.c = 0xff;
printf("ut.c=0xff ut.a : %#x\n",ut.a);
return 0;
}
fengjunhui@ubuntu:~$ gcc union.c
fengjunhui@ubuntu:~$ ./a.out
ut :0xbff6b8fc //占用的都是同一个地址
ut.a :0xbff6b8fc
ut.b :0xbff6b8fc
ut.c :0xbff6b8fc //占用的都是同一个地址
ut.a : 0x87654321
ut.b=0x8765 ut.a: 0x8765 8765 //小端存储,低字节发生了覆盖
ut.c=0xff ut.a: 0x876587 ff
struct 和 union 的优劣思考
扩展思考: struct 与 union 的优势与劣势
struct{
占用了太多的空间: 是它的优势也是它的劣势
优势 ;允许对每个元素进行单独的内存空间操作
缺点 :内存开销比较大
}
重命名 typedef
typedef 和#define 的区别
答: typedef 在 C 语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处
理器做类似的事。
例如,思考一下下面的例子:
#define dPS struct s *
typedef struct s* tPS;
以上两种情况的意图都是要定义 dPS 和 tPS 作为一个指向结构 s 指针。哪种方
法更好呢?(如果有的话)
为什么?
这是一个非常微妙的问题,任何人答对这个问题(正当的原因)是应当被恭喜的。答案是:
typedef 更好。
思考下面的例子:
dPS p1, p2;
tPS p3, p4;
第一个扩展为
struct s * p1, p2;
上面的代码定义 p1 为一个指向结构的指针, p2 为一个实际的结构体,这也许不是
你想要的。
第二个例子正 确地定义了 p3 和 p4 两个指针。
1) #define 是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含
义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。
2)typedef 是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,
但是 You cannot use the typedef specifier inside a function definition。
剩余39页未读,继续阅读
资源评论
weixin_51395955
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功