oppo

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]);
View Code

代码会在第几行中断

 

 

动态连接:

静态链接就是在程序编译阶段,将程序须要的全部东西打包放到一块儿;而动态连接是在程序须要运行时,根据须要动态的决定连接哪个库,哪个函数。

一、节省内存空间、磁盘空间

由于静态链接须要将公用的函数连接到程序中,就像每一个人都有一套锅碗瓢盆,这样固然浪费磁盘空间,并且运行时每一个进程都要有本身的函数,浪费内存空间。

二、软件更新容易,由于只更新库就行。

更新库就至关于更新锅碗瓢盆。

三、减小物理页面的换入换出,增长CPU cache命中率

程序具备局部性原理。

四、适用于大规模的软件开发,使开发过程独立、耦合度小,便于不一样开发者和开发组织之间进行开发和测试。

五、增长程序可扩展性、兼容性。

动态连接文件能够在程序运行时连接,因此全部软件的插件就是这么作的。关于更好的兼容性是由于,只要库提供的功能相同,在不一样的OS之间运行同一个软件是很容易的,而静态链接换了OS就须要从新编译,使用目标OS中的库从新连接。

动态连接的缺点:

一、当某个模块更新后,若是新模块与旧的模块不兼容,那么那些须要该模块才能运行的软件,通通撕掉。这在早期Windows中很常见。

二、动态连接相比静态链接有些慢,可是不多1%-5%性能损失。

使用volatile的场景

由于访问寄存器要比访问内存单元快的多,因此编译器通常都会做减小存取内存的优化,但有可能会读脏数据。当要求使用volatile声明变量值的时候,系统老是从新从它所在的内存读取数据,即便它前面的指令刚刚从该处读取过数据。精确地说就是,遇到这个关键字声明的变量,编译器对访问该变量的代码就再也不进行优化,从而能够提供对特殊地址的稳定访问;若是不使用valatile,则编译器将对所声明的语句进行优化。

使用场景以下:

1. 中断服务程序中修改的供其它程序检测的变量须要加volatile;

2. 多任务环境下各任务间共享的标志应该加volatile

3.  存储器映射的硬件寄存器一般也要加voliate,由于每次对它的读写均可能有不一样意义

volatile应该解释为“直接存取原始内存地址”比较合适

http://blog.csdn.net/tigerjibo/article/details/7427366

相关文章
相关标签/搜索