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