1. 程式人生 > >計算機基礎之牛客網刷題第五篇

計算機基礎之牛客網刷題第五篇

1

1 靜態連結庫的優點
(1) 程式碼裝載速度快,執行速度略比動態連結庫快;
(2) 只需保證在開發者的計算機中有正確的.LIB檔案,在以二進位制形式釋出程式時不需考慮在使用者的計算機上.LIB檔案是否存在及版本問題,可避免DLL地獄等問題。
2 動態連結庫的優點
(1) 更加節省記憶體並減少頁面交換;
(2) DLL檔案與EXE檔案獨立,只要輸出介面不變(即名稱、引數、返回值型別和呼叫約定不變),更換DLL檔案不會對EXE檔案造成任何影響,因而極大地提高了可維護性和可擴充套件性;
(3) 不同程式語言編寫的程式只要按照函式呼叫約定就可以呼叫同一個DLL函式;
(4)適用於大規模的軟體開發,使開發過程獨立、耦合度小,便於不同開發者和開發組織之間進行開發和測試。
3 不足之處
(1) 使用靜態連結生成的可執行檔案體積較大,包含相同的公共程式碼,造成浪費;
(2) 使用動態連結庫的應用程式不是自完備的,它依賴的DLL模組也要存在,如果使用載入時動態連結,程式啟動時發現DLL不存在,系統將終止程式並給出錯誤資訊。而使用執行時動態連結,系統不會終止,但由於DLL中的匯出函式不可用,程式會載入失敗;速度比靜態連結慢。當某個模組更新後,如果新模組與舊的模組不相容,那麼那些需要該模組才能執行的軟體,統統撕掉。這在早期Windows中很常見。

2以下哪種方式,在讀取磁碟上多個順序資料塊時的效率最高?
通道方式

(1)程式直接訪問方式跟迴圈檢測IO方式,應該是一個意思吧,是最古老的方式。CPU和IO序列,每讀一個位元組(或字),CPU都需要不斷檢測狀態暫存器的busy標誌,當busy=1時,表示IO還沒完成;當busy=0時,表示IO完成。此時讀取一個字的過程才結束,接著讀取下一個字。
(2)中斷控制方式:迴圈檢測先進些,IO裝置和CPU可以並行工作,只有在開始IO和結束IO時,才需要CPU。但每次只能讀取一個字。
(3)DMA方式:Direct Memory Access,直接儲存器訪問,比中斷先進的地方是每次可以讀取一個塊,而不是一個字。
(4)通道方式:比DMA先進的地方是,每次可以處理多個塊,而不只是一個塊。

3

#pragma pack(2)
class BU
{
    int number;
    union UBffer
    {
        char buffer[13];
        int number;
    }ubuf;
    void foo(){}
    typedef char*(*f)(void*);
    enum{hdd,ssd,blueray}disk;
}bu;

sizeof(bu)的值是()
22

union:當多個數據需要共享記憶體或者多個數據每次只取其一時,可以利用聯合體(union);
它有以下特點:
(1)它是一個結構;
(2)它的所有成員相對於基地址的偏移量都為0;
(3)此結構空間要大到足夠容納最”寬”的成員;
(4)其對齊方式要適合其中所有的成員
綜上:
而分配給union的實際大小不僅要滿足是對齊大小的整數倍,同時要滿足實際大小不能小於最大成員的大小。
本題目中
注意第一行,#pragma pack(2)
首先考慮沒有這句話時,我們在類、結構或者union補齊位元組的時候,找它們的成員資料中找位元組最大的那個數去衡量如何對齊,假設為z;
但是有了這句話以後,對齊方式是取 pack(n)中n和z的最小值去對齊;
可見本題中對齊位元組數為2;
之後往下看 int number; 佔4個位元組
接下來考慮union大小
union UBffer
{
char buffer[13]; // 13
int number; // 4
}ubuf; buffer 是13個位元組,number 是4個位元組,取最大的 為13,注意還要位元組對齊,對齊位元組數為2,所以Union大小為14,既滿足buffer的對齊 也滿足number的對齊。
void foo(){} 不佔
typedef char*(f)(void

); 不佔
enum{hdd,ssd,blueray}disk; 4個位元組

 綜上,總大小為14+4+0+0 +4=22

4
同一個程序中的執行緒不共享的部分是()棧空間
這裡寫圖片描述
5

在分割槽分配方案中,回收一個分割槽時有幾種不同的鄰接情況,在各種情況下應如何處理? 答:有四種:上鄰,下鄰,上下相鄰,上下不相鄰。
(1)回收分割槽的上鄰分割槽是空閒的,需要將兩個相鄰的空閒區合併成一個更大的空閒區,然後修改空閒區表。
(2)回收分割槽的下鄰分割槽是空閒的,需要將兩個相鄰的空閒區合併成一個更大的空閒區,然後修改空閒區表。
(3)回收分割槽的上、下鄰分割槽都是空閒的(空閒區個數為2),需要將三個空閒區合併成一個更大的空閒區(空閒區個數為1 ),然後修改空閒區表、
(4)回收分割槽的上、下鄰分割槽都不是空閒的,則直接將空閒區記錄在空閒區表中。
6
下面關於虛擬區域網VLAN的敘述錯誤的是()
VLAN是由區域網網段構成的與物理位置無關的邏輯組
利用乙太網交換機可以很方便地實現VLAN
每一個VLAN的工作站可處在不同的區域網中
不同VLAN內的使用者可以相互之間直接通訊 錯誤
vLAN可以強化網路安全和網路管理
VLAN能靈活控制廣播活動
VLAN(Virtual Local Area Network)的中文名為”虛擬區域網”。
虛擬區域網(VLAN)是一組邏輯上的裝置和使用者,這些裝置和使用者並不受物理位置的限制,可以根據功能、部門及應用等因素將它們組織起來,相互之間的通訊就好像它們在同一個網段中一樣,由此得名虛擬區域網。VLAN是一種比較新的技術,工作在OSI參考模型的第2層和第3層,一個VLAN就是一個廣播域,VLAN之間的通訊是通過第3層的路由器來完成的。與傳統的區域網技術相比較,VLAN技術更加靈活,它具有以下優點:
網路裝置的移動、新增和修改的管理開銷減少;可以控制廣播活動;可提高網路的安全性。
在計算機網路中,一個二層網路可以被劃分為多個不同的廣播域,一個廣播域對應了一個特定的使用者組,預設情況下這些不同的廣播域是相互隔離的。不同的廣播域之間想要通訊,需要通過一個或多個路由器。這樣的一個廣播域就稱為VLAN。