1.高质量程序设计,重点应放在:(ABD)git
A、编码 B、调试 C、维护 D、设计算法
2. Linux系统IPC方法中最快的是(D)编程
A、消息队列 B、管道 C、FIFO D、共享内存多线程
3.如下不属于动态连接相对于静态连接的优点的是(C)分布式
A、节约存储空间 B、方便更新、部署 C、装载速度快 D、节约运行内存ide
4.arm中可使用寄存器最少的模式是函数
A、Suoervisor Mode B、User Mode C、FIQ Mode D、Undefined Mode性能
5.int A[2][3]={1,2,3,4,5,6};则A[1][0]和*(*(A+1)+1)的值分别是(A)测试
A、4 5 B、4 3 C、3 5 D、3 4优化
6. 同一进程下的不一样线程能够共享(CD)
A、Stack B、register C、data section D、file id
7. 定义一个函数指针,指向的函数有两个int形参而且返回一个函数指针。。。
8.如下编程提示正确的是(ABCD)
A、在定义类型的新名字时,尽可能使用typedof而不是#define
B、一般状况下,源代码的可读性比运行效率更重要
C、不要使用goto语句
D、向函数传递结构体参数是低效的
9.
typedef union{
struct field_def{
int a:1;
int b:2;
int c:3;
}fields;
int data;
}REG_DEF;
REG_DEF rega;
rega.data = 6;
请问rega.fields.b=()
A、 0 B、1 C、2 D、3
10.代码
void func(){
static int val;
char *p = &val;
}中,变量p的内存地址位于
A、已初始化数据段 B、未初始化数据段 C、堆 D、栈
11. 如下属于分布式版本控制系统的是
A、CVS B、 Subversion C、SourceInsight D、 git
12.#define f(x) x*x
int a=10; int b=3;
int c=4;
int i=f(a-(b+c));
printf("%d",i);
程序执行后输出的结果是
A、 3 B、-67 C、9 D、-40
13.实现运行时多态的机制是:虚函数
14. 如下须要使用volatile的场景是
A、多线程的共享变量 B、硬件映射的IO端口 C将变量强制在CPU寄存器中 D、ISR里访问的全局变量
15.将一个递归算法转变为非递归算法一般使用:栈
16.foo(2^31-3)的值是
int foo(int x){
return x&-x;
}
A、0 B、1 C、2 D、4
17在Linux的中断上下文中,如下哪些操做时被禁止的
A、进入睡眠状态或主动放弃CPU
B、 持有自旋锁
C、执行耗时的操做
D、访问用户空间爱你的虚拟内存
18.如下描述正确的是
A、 在页式存储管理中,用户应将本身的程序划分为若干相等的大小
B、全部的进程都挂起时,系统将陷入死循环
C、执行系统调用时,能够被中断
D、进程优先级是进程调度的重要依据
19.
1 struct test{ 2 int i; 3 char *p; 4 char s[3]; 5 }; 6 7 struct test *t=0; 8 if(t->s) 9 printf("%d\n", t->s); 10 if(t->p) 11 printf("%d\n", t->p); 12 if(t->s[1]) 13 printf("%d\n", t->s[1]);
代码会在第几行中断
静态链接就是在程序编译阶段,将程序须要的全部东西打包放到一块儿;而动态连接是在程序须要运行时,根据须要动态的决定连接哪个库,哪个函数。
一、节省内存空间、磁盘空间
由于静态链接须要将公用的函数连接到程序中,就像每一个人都有一套锅碗瓢盆,这样固然浪费磁盘空间,并且运行时每一个进程都要有本身的函数,浪费内存空间。
二、软件更新容易,由于只更新库就行。
更新库就至关于更新锅碗瓢盆。
三、减小物理页面的换入换出,增长CPU cache命中率
程序具备局部性原理。
四、适用于大规模的软件开发,使开发过程独立、耦合度小,便于不一样开发者和开发组织之间进行开发和测试。
五、增长程序可扩展性、兼容性。
动态连接文件能够在程序运行时连接,因此全部软件的插件就是这么作的。关于更好的兼容性是由于,只要库提供的功能相同,在不一样的OS之间运行同一个软件是很容易的,而静态链接换了OS就须要从新编译,使用目标OS中的库从新连接。
动态连接的缺点:
一、当某个模块更新后,若是新模块与旧的模块不兼容,那么那些须要该模块才能运行的软件,通通撕掉。这在早期Windows中很常见。
二、动态连接相比静态链接有些慢,可是不多1%-5%性能损失。
由于访问寄存器要比访问内存单元快的多,因此编译器通常都会做减小存取内存的优化,但有可能会读脏数据。当要求使用volatile声明变量值的时候,系统老是从新从它所在的内存读取数据,即便它前面的指令刚刚从该处读取过数据。精确地说就是,遇到这个关键字声明的变量,编译器对访问该变量的代码就再也不进行优化,从而能够提供对特殊地址的稳定访问;若是不使用valatile,则编译器将对所声明的语句进行优化。
使用场景以下:
1. 中断服务程序中修改的供其它程序检测的变量须要加volatile;
2. 多任务环境下各任务间共享的标志应该加volatile
3. 存储器映射的硬件寄存器一般也要加voliate,由于每次对它的读写均可能有不一样意义
volatile应该解释为“直接存取原始内存地址”比较合适
http://blog.csdn.net/tigerjibo/article/details/7427366