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

相關文章
相關標籤/搜索