Time of Update: 2018-12-05
1:首先編譯器對每個包含虛函數的類建立一個表(稱為VTABLE),在VTABLE中,編譯器放置特定類的虛函數的地址。在每個帶有虛函數的類中,編譯器秘密地放置一個指標,稱為vpointer,指向這個對象的VTABLE,當通過基類指標做虛函數調用時,(也就是做多態調用時),編譯器靜態地插入能取得這個VPTR並在VTABLE表中尋找函數地址的代碼,這樣就能調用正確的函數並引起動態綁定的發生; 2:如果一個類中有一個以上的虛函數,編譯器只在這個結構中插入一個單個指標;因此當兩個相同的類,帶虛函數的類比不
Time of Update: 2018-12-05
有兩種策略來解決hash table的碰撞問題。第一種策略是open addressing,如果數組中當前位置已經被佔用,他會為當前資料重新選擇一個位置;第二種策略是separate chaining,在數組每一個位置安放一個鏈表。1.Open Addressing如果當前資料所修位置被佔用,該策略會為資料重新選擇一個位置。這種測略有三種方法可以使用:a.Liner probing這種方法簡單的以當前位置為起點,線性搜尋空閑位置。如果hash函數選擇了第n個位置給當前資料,但是n位置已經被佔用,
Time of Update: 2018-12-05
5down vote accepted For link-local addresses, you also need to specify the scope ID of the network interface that is associated with the address... something like this:server.sin6_scope_id = 5; /* or whatever the scope ID is for the network
Time of Update: 2018-12-05
不同的CPU有不同的位元組序類型 這些位元組序是指整數在記憶體中儲存的順序 這個叫做主機序最常見的有兩種1. Little endian(小頭):將低序位元組儲存在起始地址2. Big endian(大頭):將高序位元組儲存在起始地址 LE
Time of Update: 2018-12-05
原型: extern void bzero(void *s, int n);用法: #include <string.h> 功能:置位元組字串s的前n個位元組為零。 說明:bzero無傳回值。 舉例: #include <syslib.h>#include <string.h>int main(){ struct { int a; char s[5]; float f; } tt; c
Time of Update: 2018-12-05
編譯器原理:編譯器用不同的內部名f()來區分兩個函數:例:class A{void f(float,int); } 編譯器會轉換成: _X_f_float_int 的形式; * 成員函數被重載的特徵 1:相同的範圍(在同一個類中); 2:函數名字相同; 3:參數不同(參數個數,參數類形); 4:virtual 關鍵字可有可無。 5:不能通過存取權限、傳回型別、定義了預設實參,拋出的異常進行重載; 6:overload編譯時間的多態
Time of Update: 2018-12-05
#ifndef MEM_H#define MEM_Htypedef unsigned char byte;class Mem{ public: Mem(); Mem(int sz); ~Mem(); int msize(); byte* pointer(); byte* pointer(int minSize);private: byte* mem; int size; void ensureMinSize(int
Time of Update: 2018-12-05
在並發伺服器設計中,很常用的一種辦法是用fork為每個串連建立子進程來單獨處理用戶端請求。流程圖如下:可見,在父進程中直接執行accept等待下一個串連而並沒有用wait或者waitpid來等待子進程返回。這會造成怎樣的後果呢?當子進程exit退出的時候,它並沒有真正銷毀,而是還著保留一個資料結構用來記錄它的退出狀態等資訊(因為父進程有可能會擷取該資訊)。若父進程不用wait或者waitpid等待,則此資訊會一直保留直到父進程退出。不幸的是,並發伺服器恰恰在正常情況會一直運行下去,並且不斷為每個
Time of Update: 2018-12-05
Getpwuid定義函數: struct passwd * getpwuid(uid_t uid);函數說明: getpwuid()用來逐一搜尋參數uid 指定的使用者識別碼,找到時便將該使用者的數 據以結構返回,結構請參考將該使用者的資料以passwd 結構返回。passwd 結構請參考getpwent()。傳回值 返回passwd 結構資料,如果返回NULL 則表示已無資料,或者有錯誤發生。 系統資料相關的結構passwd定義如下struct passwd{ char
Time of Update: 2018-12-05
int prctl(int option,unsigned longarg2,unsigned long arg3,unsigned long arg4,unsigned long arg5)這個系統調用指令是為進程制定而設計的,明確的選擇取決於option:PR_GET_PDEATHSIG :返回處理器訊號; PR_SET_PDEATHSIG :arg2作為處理器訊號pdeath被輸入,正如其名,如果父進程不能再用,進程接受這個訊號。 PR_GET_DUMPABLE
Time of Update: 2018-12-05
雙鏈表應用#ifndef LIST_H_DEFINED#define LIST_H_DEFINEDstruct list_head { structlist_head *next; structlist_head *prev;}; 初始化#define DECLARE_LIST_INIT(name) \ struct list_head name = { &(name), &(name) }static void inline
Time of Update: 2018-12-05
1、利用網路處理量計算。計算參考公式:並發 = connection established / min(server keepalive, server timeout)翻譯一下:並發 = 伺服器傳輸連結數 除以 伺服器軟體的keepalive設定和伺服器軟體的逾時設定之間的最小值這個公式算出來的數字是keepalive時間段內的平均值,比真實平均值要小一點,如果想找最大值就要設定keepalive為0或1,然後多探測幾次。connection
Time of Update: 2018-12-05
函數 setFocusPolicy()的參數類形Qt::enum FocusPolicy {TabFocus\ClickFocus\StrongFocus\WheelFocus\NoFocus}enum Qt::FocusPolicy的相關解釋This enum type defines the various policies a widget can have with respect to acquiring keyboard focus.Constant
Time of Update: 2018-12-05
我們知道在環型網路中只存在一個物理訊號傳輸通道,都是通過一條傳輸介質來傳輸的,這樣就存在各節點爭搶通道的矛盾,傳輸效率較低。引入集線器這一網路集線裝置後,每一個站是用它自己專用的傳輸介質串連到集線器的,各節點間不再只有一個傳輸通道,各節點發回來的訊號通過集線器集中,集線器再把訊號整形、放大後發送到所有節點上,這樣至少在上行通道上不再出現碰撞現象。但基於集線器的網路仍然是一個共用介質的區域網路,這裡的"共用"其實就是集線器內部匯流排,所以當上行通道與下行通道同時發送資料時仍然會存在訊號碰撞現象。當
Time of Update: 2018-12-05
在linux中每個進程有三個[實際上有第4個]使用者識別碼.real uid : 真實使用者ID. saved uid : 已儲存使用者ID , effective uid : 有效使用者ID真實使用者ID(real uid)是login時的使用者.而在運行過程中,用於所有的安全檢查的是有效使用者ID(effective uid).一般情況下:real uid = saved uid = effective uid在某些場合下,使用用setuid,setruid函數可以改變effective
Time of Update: 2018-12-05
What is a Digital Signature?An introduction to Digital Signatures, by David YoudBob(Bob's public key)(Bob's private key)Bob has been given two keys. One of Bob's keys is called a Public Key, the other is called a Private Key. Bob's
Time of Update: 2018-12-05
結構體中最後一個數組長度為零print?1 typedef struct _ex_mng 2 { 3 unsigned int type; 4 unsigned int oper; 5 char data[0]; 6 }ex_mng_t; 最近在項目常用到這樣子的一個結構體,最後一個成員為可變長的數組。 char data[0]中的data並不是指標,是一個位移量,這個位移量指向的是a、b後面緊接著的空間,代表了該結構體後面資料的起始地址,所以它其實並不佔用任何空間,因此sizeo
Time of Update: 2018-12-05
虛擬區域網路的特點:一個由5台二層交換器(交換器1~5)串連了大量客戶機構成的網路。假設這時,電腦A需要與電腦B通訊。在基於乙太網路的通訊中,必須在資料幀中指定目標MAC地址才能正常通訊,因此電腦A必須先廣播“ARP請求(ARP Request)資訊”,來嘗試擷取電腦B的MAC地址。 交換器1收到廣播幀(ARP請求)後,會將它轉寄給除接收埠外的其他所有連接埠,也就是Flooding了。接著,交換器2收到廣播幀後也會Flooding。交換器3、4、5也還會Flooding。最終ARP請求會被轉寄到
Time of Update: 2018-12-05
strdup函數的用法 函數名: strdup功 能: 將串拷貝到建立的位置處用 法: char *strdup(char *str); 這個函數在linux的man手冊裡解釋為:The strdup() function returns a pointer toa new string which is aduplicate of the string s. Memory for thenew string is obtained withmalloc(3), and can be
Time of Update: 2018-12-05
【個人體會:基本上就是按照以下的步驟,當然有的地方也適當進行了修改,不應照搬照抄】[轉自:http://www.emptykid.com/blog/archives/93]安裝CVS Server$ sudo apt-get install cvs$ sudo apt-get install cvsd在安裝cvsd的過程中會讓你輸入repository的位置,也就是倉庫名,這裡以預設的myrepos為例,輸入myrepos,確定 配置建立倉庫目錄 $ cd /var/lib/cvsd$