青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

life02

  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  197 隨筆 :: 3 文章 :: 37 評(píng)論 :: 0 Trackbacks

#

[此帖已被設(shè)為精華] 轉(zhuǎn)載

發(fā)信站: 北郵人論壇 (Tue Oct 20 16:52:13 2009), 站內(nèi)

     先簡(jiǎn)單介紹一下本人,本人小碩,信通院通信與信息系統(tǒng),無線方向,投的百度無線新技術(shù)研發(fā),技術(shù)崗。雖然在實(shí)驗(yàn)室做過一些項(xiàng)目,但也都是無線通信的底層開發(fā),和互聯(lián)網(wǎng)沒有任何關(guān)系。。。
   今早尚未睡醒,突然一陣手機(jī)鈴聲傳來,一個(gè)陌生的手機(jī)號(hào)碼,見其不是響一聲電話,遂接之,在不算清楚的狀態(tài)下被通知下午一點(diǎn)普天大廈百度面試,突如其來的通知搞的我有點(diǎn)措手不及。本來覺得18號(hào)筆試完直接被鄙視了,這從天而降的機(jī)會(huì)還是迫使我需要在短時(shí)間內(nèi)做好必要的準(zhǔn)備,所謂的準(zhǔn)備也就是從網(wǎng)上查查面經(jīng),復(fù)習(xí)復(fù)習(xí)筆試題目,總之還是抱著學(xué)習(xí)的態(tài)度去的,沒抱太大希望。
   下午12點(diǎn)40到達(dá)普天大廈,簽到后稍微等了一會(huì)兒,接待我的jj將我指到一個(gè)小型的廣場(chǎng),陽光很好,有很多小圓桌,我的面試官已經(jīng)坐在其中一個(gè)小圓桌上等我了,是一對(duì)一的面試,坐下后簡(jiǎn)單打了個(gè)招呼,面試就開始了,先是按照我的簡(jiǎn)歷問我關(guān)于最近一個(gè)項(xiàng)目的相關(guān)內(nèi)容,包括項(xiàng)目組的職責(zé),做過什么,貢獻(xiàn)在哪,碰到過什么難題等等,因?yàn)槊嬖嚬賕g估計(jì)也不太懂我做過的東西,我就blabla一頓介紹,然后又問我學(xué)的課程中認(rèn)為哪個(gè)比較困難,困難在哪,有沒有具體例子,總之問的比較細(xì)。我覺得在這個(gè)環(huán)節(jié)最重要的就是讓面試官覺得項(xiàng)目是你做的,有的可講,對(duì)于自己的貢獻(xiàn)的部分講的越細(xì)越好,對(duì)方聽沒聽懂沒有關(guān)系,關(guān)鍵在于能夠有條理的回答對(duì)方問的問題(當(dāng)然,如果對(duì)方對(duì)自己做過的項(xiàng)目非常了解,回答問題的時(shí)候就應(yīng)該盡量謹(jǐn)慎,不要扯淡,以免露怯。。。)
   之后的環(huán)節(jié)是算法,數(shù)據(jù)結(jié)構(gòu),編程題,由面試官現(xiàn)場(chǎng)出題,他先出了兩個(gè)比較簡(jiǎn)單的題目,一個(gè)是 char str ="hello";sizeof(str)和strlen(str)為多少,還有一個(gè)是floata;將其和0做比較的if語句如何編寫。然后出了一個(gè)數(shù)據(jù)結(jié)構(gòu)算法實(shí)現(xiàn)題:給定二叉樹,寫出計(jì)算該二叉樹的高度的函數(shù),這題我沒想出來。。。他又出了一個(gè):給定二叉樹,寫出拷貝該二叉樹的函數(shù),返回拷貝后根節(jié)點(diǎn)值,這道題我只說出了大概的思路,看面試官的表情,不是很滿意。。。隨后又問了關(guān)于二叉樹深度優(yōu)先和廣度優(yōu)先的算法問題,和堆排序的算法問題,無奈專業(yè)背景相差過大,這些我都沒答上來,對(duì)于學(xué)計(jì)算機(jī)的學(xué)生,我覺得這些問題應(yīng)該都不難。。。最后又給我出了道關(guān)于字符串的問題:給定字符串,內(nèi)容為a-z的字符,其中有一個(gè)字符出現(xiàn)為奇數(shù)次,其他均為偶數(shù)次,找出出現(xiàn)奇數(shù)次的字符,我簡(jiǎn)單給出了一個(gè)算法,但是時(shí)間復(fù)雜度過高,于是面試官gg問我能不能對(duì)算法進(jìn)行優(yōu)化,這個(gè)又難住我了,雖然面試官gg人很好,在我想的過程中一直給予提示,無奈我水平不夠。。。想出來的答案都相去甚遠(yuǎn)。。。我覺得這個(gè)環(huán)節(jié)本身考察的問題其實(shí)并不難,都是基礎(chǔ),換一個(gè)學(xué)計(jì)算機(jī)的學(xué)生,這些東西不過是平時(shí)的功課罷了,只要算法,數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)知識(shí)過硬,回答這些問題應(yīng)該都不會(huì)很困難
   距離面試結(jié)束還有幾分鐘的時(shí)候,和面試官gg簡(jiǎn)單聊了聊,獲知對(duì)方是南開計(jì)算機(jī)畢業(yè)的,告訴我互聯(lián)網(wǎng)行業(yè)技術(shù)崗主要要求的素質(zhì)包括算法和數(shù)據(jù)結(jié)構(gòu),網(wǎng)絡(luò)的基本知識(shí),編程能力等等,期間還說了一些我沒太明白的專有名詞,總之,他覺得以我現(xiàn)在的知識(shí)儲(chǔ)備和項(xiàng)目經(jīng)歷,目前還不太適合這個(gè)職位。。。
    一個(gè)小時(shí)后,面試結(jié)束,本來我也是抱著學(xué)習(xí)的心態(tài)過來試試,對(duì)于這樣的結(jié)果我還是預(yù)想的到的,這一趟面試也算沒有白來,能夠?qū)W到一些東西我就知足了。希望大家都能找到好工作,共勉!
轉(zhuǎn)載請(qǐng)注明出自應(yīng)屆生求職招聘論壇 http://bbs.yingjiesheng.com/,本貼地址:http://bbs.yingjiesheng.com/thread-253544-1-1.html

 

 

posted @ 2009-10-23 14:56 life02 閱讀(400) | 評(píng)論 (0)編輯 收藏

1 計(jì)算 a^b << 2 (運(yùn)算符優(yōu)先級(jí)問題)
int a = 2;
int b = 1;
int c = 2;
cout << (a ^ b << c);
6
2 根據(jù)先序中序求后序

3 a[3][4]哪個(gè)不能表示 a[1][1]: *(&a[0][0]) *(*(a+1)+1) *(&a[1]+1) *(&a[0][0]+4)
cout << *(&a[1][1]) << endl
       <<*(*(a+1)+1) << endl
       << *(&a[1]+1) << endl
       << *(&a[0][0]+4);
6
6
0012FEC8
5
4 for(int i...)
    for(int j...)
      printf(i,j);
      printf(j)
會(huì)出現(xiàn)什么問題
J沒有定義,不在其作用域
5 for(i=0;i<10;++i,sum+=i);的運(yùn)行結(jié)果
    int i, sum = 0;
for(i=0;i<10;++i,sum+=i);
cout << sum;
55
6 10個(gè)數(shù)順序插入查找二叉樹,元素62的比較次數(shù)

7 10個(gè)數(shù)放入模10hash鏈表,最大長(zhǎng)度是多少

8 fun((exp1,exp2),(exp3,exp4,exp5))有幾個(gè)實(shí)參
2個(gè),逗號(hào)運(yùn)算符,
9 希爾 冒泡 快速 插入 哪個(gè)平均速度最快

10 二分查找是 順序存儲(chǔ) 鏈存儲(chǔ) 按value有序中的哪些

11 順序查找的平均時(shí)間

12 *p=NULL *p=new char[100] sizeof(p)各為多少
都是4
13 頻繁的插入刪除操作使用什么結(jié)構(gòu)比較合適,鏈表還是數(shù)組
鏈表
14 enum的聲明方式
enum A{
a1,
a2,
a3,
};
15 1-20的兩個(gè)數(shù)把和告訴A,積告訴B,A說不知道是多少,
B也說不知道,這時(shí)A說我知道了,B接著說我也知道了,問這兩個(gè)數(shù)是多少


大題:

1 把字符串轉(zhuǎn)換為小寫,不成功返回NULL,成功返回新串

char* toLower(char* sSrcStr)
{
    char* sDest= NULL;
    if( __1___)
    {
        int j;
        sLen = strlen(sSrcStr);
        sDest = new [_______2_____];
        if(*sDest == NULL)
            return NULL;
        sDest[sLen] = '\0';
        while(_____3____)
           sDest[sLen] = toLowerChar(sSrcStr[sLen]);
    }
    return sDest;
}
char toLowerChar(char a)
{
    if(a >= 'A' && a <= 'Z')
       return a - 'A' + 'a';
}

char* toLower(char* sSrcStr)
{
    char* sDest= NULL;
    if(sSrcStr)
    {
       int j;
       int sLen = strlen(sSrcStr);
       sDest = new char[sLen + 1];
       if(*sDest == NULL)
           return NULL;
       sDest[sLen] = '\0';
       while(sLen--)
           sDest[sLen] = toLowerChar(sSrcStr[sLen]);
    }
    return sDest;
}

2 把字符串轉(zhuǎn)換為整數(shù) 例如:"-123" -> -123

main()
{
    .....
    if( *string == '-' )
        n = ____1______; -1* num(string+1)
    else
        n = num(string);
    .....
}

int num(char* string)
{
    for(;!(*string==0);string++)
    {
        int k;
        k = __2_____; *string
        j = --sLen;
        while( __3__) j--
            k = k * 10;
        num = num + k;
    }
    return num;
}

附加題:

1 linux下調(diào)試core的命令,察看堆棧狀態(tài)命令

2 寫出socks套接字 服務(wù)端 客戶端 通訊程序

3 填空補(bǔ)全程序,按照我的理解是添入:win32調(diào)入dll的函數(shù)名
查找函數(shù)入口的函數(shù)名 找到函數(shù)的調(diào)用形式
把formView加到singledoc的聲明 將singledoc加到app的聲明

4 有關(guān)系 s(sno,sname) c(cno,cname) sc(sno,cno,grade)
1 問上課程 "db"的學(xué)生no
2 成績(jī)最高的學(xué)生號(hào)
3 每科大于90分的人數(shù)

2005年騰訊招聘
選擇題(60)
c/c++ os linux 方面的基礎(chǔ)知識(shí) c的Sizeof函數(shù)有好幾個(gè)!
程序填空(40)
1.(20) 4空x5
不使用額外空間,將 A,B兩鏈表的元素交叉歸并
2.(20) 4空x5
MFC 將樹序列化 轉(zhuǎn)存在數(shù)組或 鏈表中!

發(fā)信人: ChinaOfey (勇敢的傻,傻得勇敢), 信區(qū): Career_Plaza
標(biāo) 題: 騰訊筆試題
發(fā)信站: 水木社區(qū) (Sat Nov 5 16:25:25 2005), 站內(nèi)

希望明年的兄弟有用!(B卷)

第一部分:基本都是數(shù)據(jù)結(jié)構(gòu)題+1,2道操作系統(tǒng)和數(shù)據(jù)庫相關(guān)的(比較基本)

有印象的:

1,為節(jié)省空間,兩個(gè)棧共用一個(gè)空間,棧底在兩邊,問什么時(shí)候表明空間用完
    答案:棧頂相遇時(shí)
    這道題就是很基礎(chǔ)的一個(gè)題目,因?yàn)槭堑谝坏李},所以印象比較深^_^

2,char A[5]; char* B ="abcdefg"; void * C; C = new char[100];
    sizeof(A) sizeof(B) size(C)
5,4,4
3,爸爸,媽媽,妹妹,小強(qiáng),至少兩個(gè)人同一生肖的概率是多少
    1- 12*11*10*9/12*12*12*12 = 43% ,我忘用1減了....

然后還有幾個(gè)看程序給結(jié)果的題,考察了類,指針的內(nèi)容

第二部分:程序填空

   主要要能看出他的思路

第三部分:寫代碼

   1,關(guān)于mfc的,一個(gè)控件,顯示時(shí)間,1s鐘刷新一次

   2,SQL語言進(jìn)行簡(jiǎn)單的數(shù)據(jù)庫操作,建表,查詢,求平均工資等

     不記得語言了,因此只好自創(chuàng)....ft

   3,Unix進(jìn)程通信有哪些方式,各有什么特點(diǎn)?

   (其中A卷給的是道網(wǎng)絡(luò)編程題目)

第四部分:主觀題

考rp的,比較無聊,手都寫酸了....

程序4說明]
設(shè) M 叉樹采用列表法表示,即每棵子樹對(duì)應(yīng)一個(gè)列表,列表的結(jié)構(gòu)為:子樹根結(jié)點(diǎn)的值部分
(設(shè)為一個(gè)字符) 和用“( )”,括起來的各子樹的列表 (如有子樹的話) ,各子列表間用“
,”,分隔。例如下面的三叉樹可用列表 a( b( c,d ),e,f( g,h,i ))表示。
 

本程序輸入列表,生成一棵 M 叉樹,并由 M 叉樹輸出列表。假定輸入無錯(cuò)誤。
[程序4]
#include〈stdio.h〉
#include〈stdlib.h〉
#define M 3
typedef struct node{ char val;
struct node *subTree[M];
} NODE;
char buf[255] ,*str = buf
NODE *d = NULL
NODE *mackTree( ) /*由列表生成M叉樹*/
{ int k; NODE *s ;
s = __(1)__
s -> val = *str++ ;
for ( k = 0 ; k < M ; k++ ) s-> subTree[k] = NULL ;
if(*str='( '){
k = 0;
do { str++;
s -> subTree[k] = __(2)__ ;
if ( *str == ')' ) { str++; break ; }
k = k+l ;
} while ( __(3)__ );
}
return s ;
}
void walkTree( NODE *t ) /*由 M 叉樹輸出列表*/
{ int i ;
if( t != NULL ) {
__(4)__
if ( t -> subTree[0] == NULL ) return ;
putchar ( '( ' ) ;
for ( i = 0 ; i < m ; i++) {
__(5)__
if ( i! = M - l && t -> subTree[i+l] != NULL )
putchar ( ', ' ) ;
}
putchar ( ') ' ) ;
}
}
 
void main( )
{ printf( "Enter exp:" ) ;
scanf( "%S" , str ) ;
d = makeTree() ;
walkTree( d ) ; putchar( '\n') ;
}
有兩個(gè)集合  
集合A{1,7,19,21,55,100。。。}  
集合B{7,22,100。。。}  
兩個(gè)集合都是10萬個(gè)數(shù)據(jù)(已排序),要求寫一個(gè)算法,判斷B是不是A的子集,算法時(shí)間復(fù)雜度為Q(N)
posted @ 2009-10-19 21:59 life02 閱讀(417) | 評(píng)論 (1)編輯 收藏

今天上午在南大,做了阿里巴巴的技術(shù)題,我兩份都做了,下面把其中C++相關(guān)的題回憶了一部分起來,希望對(duì)大家有幫助啊,
為了給大家省點(diǎn)錢,我就直接粘貼在頁面上啦,描述不全的,大家諒解啊

1.Stuct Foo{
Foo(){}
Foo(int){}
Void fun(){}
};

int main (){
Foo a(10);
(1)
a.fun();
(2)
Foo b();
(3)
b.fun();
(4)
}
上面的程序中哪個(gè)語句是錯(cuò)誤的;

2.struct 和 class 的區(qū)別;

3.const char*p1=”hello”;

Char *const p2=”world”;
下面哪些操作是合法的:(1)p1++;
(2)*p1=”w”;
(3)p2++;
(4)*p2=”h”;

4.n進(jìn)制下。567*456=150216成立,則n的值是多少?

5.C++中不能重載的運(yùn)算符是?

6.排序方法中元素比較次數(shù)與初始化排序無關(guān)的是哪種排序方法。

7. int x[4]={0}; int y[4]={1};則x,y的值是多少?

8.二分查找的理論

9.采取FIFO頁面淘汰算法,如何計(jì)算缺頁。

10.順序棧的容量如何計(jì)算

11.文件索引結(jié)構(gòu)

12.搜索所用的數(shù)據(jù)結(jié)構(gòu)的內(nèi)存,以及速度的問題

13.堆中的數(shù)據(jù)的存儲(chǔ)機(jī)制

14.頁式存儲(chǔ)系統(tǒng),如何計(jì)算分塊的大小

15.std::vector::iterator
可重載的運(yùn)算符是哪些: ++,>>, *(前置), ==

16.判斷單向鏈表是否存在環(huán)的最佳方案是什么?

17.100張多米諾骨牌1,2,3 ……100,第一次先把所有的基數(shù)位置的牌拿掉,第二次把剩下的基數(shù)位置的牌拿掉,依此類推,最后剩下的牌是哪個(gè):(A)32,(B)64,(C)88,(D)96

18.在C++中不能重載下面的哪個(gè)運(yùn)算符:(A)*
(B) ?:
(C) ::
(D) delete

19.就是指針的一大堆問題啦,什么函數(shù)指針啊,數(shù)組指針之類的

20. sizeof() 計(jì)算問題

21. public,protected在派生或者繼承之后的訪問權(quán)的問題
轉(zhuǎn)載請(qǐng)注明出自應(yīng)屆生求職招聘論壇 http://bbs.yingjiesheng.com/,本貼地址:http://bbs.yingjiesheng.com/thread-239002-1-1.html

 

 

posted @ 2009-10-18 21:28 life02 閱讀(1735) | 評(píng)論 (1)編輯 收藏

作者:baihacker
來源:http://hi.baidu.com/feixue http://hi.csdn.net/baihacker

問題描述:
12個(gè)高矮不同的人,排成兩排,每排必須是從矮到高排列,而且第二排比對(duì)應(yīng)的第一排的人高,問排列方式有多少種?
這個(gè)筆試題,很YD,因?yàn)榘涯硞€(gè)遞歸關(guān)系隱藏得很深.

問題分析:
我們先把這12個(gè)人從低到高排列,然后,選擇6個(gè)人排在第一排,那么剩下的6個(gè)肯定是在第二排.
用0表示對(duì)應(yīng)的人在第一排,用1表示對(duì)應(yīng)的人在第二排,那么含有6個(gè)0,6個(gè)1的序列,就對(duì)應(yīng)一種方案.
比如000000111111就對(duì)應(yīng)著
第一排:0 1 2 3 4 5
第二排:6 7 8 9 10 11
010101010101就對(duì)應(yīng)著
第一排:0 2 4 6 8 10
第二排:1 3 5 7 9 11
問題轉(zhuǎn)換為,這樣的滿足條件的01序列有多少個(gè).
觀察1的出現(xiàn),我們考慮這一個(gè)出現(xiàn)能不能放在第二排,顯然,在這個(gè)1之前出現(xiàn)的那些0,1對(duì)應(yīng)的人
要么是在這個(gè)1左邊,要么是在這個(gè)1前面.而肯定要有一個(gè)0的,在這個(gè)1前面,統(tǒng)計(jì)在這個(gè)1之前的0和1的個(gè)數(shù).
也就是要求,0的個(gè)數(shù)大于1的個(gè)數(shù).
OK,問題已經(jīng)解決.
如果把0看成入棧操作,1看成出棧操作,就是說給定6個(gè)元素,合法的入棧出棧序列有多少個(gè).
這就是catalan數(shù),這里只是用于棧,等價(jià)地描述還有,二叉樹的枚舉,多邊形分成三角形的個(gè)數(shù),圓括弧插入公式中的
方法數(shù),其通項(xiàng)是c(2n, n)/(n+1).

在 < <計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)>>,第三版,Donald E.Knuth著,蘇運(yùn)霖譯,第一卷,508頁,給出了證明:
問題大意是用S表示入棧,X表示出棧,那么合法的序列有多少個(gè)(S的個(gè)數(shù)為n)
顯然有c(2n, n)個(gè)含S,X各n個(gè)的序列,剩下的是計(jì)算不允許的序列數(shù)(它包含正確個(gè)數(shù)的S和X,但是違背其它條件).
在任何不允許的序列中,定出使得X的個(gè)數(shù)超過S的個(gè)數(shù)的第一個(gè)X的位置.然后在導(dǎo)致并包括這個(gè)X的部分序列中,以
S代替所有的X并以X代表所有的S.結(jié)果是一個(gè)有(n+1)個(gè)S和(n-1)個(gè)X的序列.反過來,對(duì)一垢一種類型的每個(gè)序列,我們都能
逆轉(zhuǎn)這個(gè)過程,而且找出導(dǎo)致它的前一種類型的不允許序列.例如XXSXSSSXXSSS必然來自SSXSXXXXXSSS.這個(gè)對(duì)應(yīng)說明,不允許
的序列的個(gè)數(shù)是c(2n, n-1),因此an = c(2n, n) - c(2n, n-1).[Comptes Rendus Acad.Sci.105(Paris, 1887), 436~437]

驗(yàn)證:
其中F表示前排,B表示后排,在枚舉出前排的人之后,對(duì)應(yīng)的就是后排的人了,然后再驗(yàn)證是不是滿足后面的比前面對(duì)應(yīng)的人高的要求.
C/C++ code
#include <iostream> using namespace std; int bit_cnt(int n) { int result = 0; for (; n; n &= n-1, ++result); return result; } int main() { int F[6], B[6]; int ans = 0; for (int state = 0; state < (1 << 12); ++state) if (bit_cnt(state) == 6) { int i = 0, j = 0; for (int k = 0; k < 12; ++k) if (state&(1<<k)) F[i++] = k; else B[j++] = k; int ok = 1; for (int k = 0; k < 6; ++k) if (B[k] < F[k]) {ok = 0; break;} ans += ok; } cout << ans << endl; return 0; }
結(jié)果:132
而c(12, 6)/7 = 12*11*10*9*8*7/(7*6*5*4*3*2) = 132
注意:c(2n, n)/(n+1) = c(2n, n) - c(2n, n-1)

估計(jì)出題的人也讀過 < <計(jì)算機(jī)程序藝術(shù)>>吧.

PS:
另一個(gè)很YD的問題:
有編號(hào)為1到n(n可以很大,不妨在這里假定可以達(dá)到10億)的若干個(gè)格子,從左到右排列.
在某些格子中有一個(gè)棋子,不妨設(shè)第xi格有棋子(1 <=i <=k, 1 <=k <=n)
每次一個(gè)人可以把一個(gè)棋子往左移若干步,
但是不能跨越其它棋子,也要保證每個(gè)格子至多只有一個(gè)棋子.
兩個(gè)人輪流移動(dòng),移動(dòng)不了的為輸,問先手是不是有必勝策略.
posted @ 2009-10-17 22:18 life02 閱讀(432) | 評(píng)論 (1)編輯 收藏

1. 匹配"[10]:dddddd"和"[9]:abcdegf"但不匹配"[a]:xfdf"的正則表達(dá)式。

2. int a[5]={1,2,3,4,5};

    printf("%d\n", *((int*)(&a+1)-2);

    輸出是什么。

    答:4.    分析:(int*)(&a+1)=a+5=&a[5]

編程題:

1. 給定一個(gè)int型數(shù)組array[n],寫一個(gè)函數(shù)sort(int array[], int n),n為數(shù)組長(zhǎng)度。使得數(shù)組中不大于零的元素在前,大于零的元素在后,要求時(shí)間復(fù)雜度O(n)。

2. 有1001個(gè)球。甲乙兩人交替取球,每次可取1、2、4個(gè)球,誰拿到最后一個(gè)球就算輸。如果甲先拿,問他有沒有必勝的把握?為什么?

   答:有。

          第一次甲拿1個(gè)球,以后每次:

          i. 乙拿1個(gè),甲拿2個(gè);

         ii. 乙拿2個(gè),甲拿1個(gè)或4個(gè);

         iii. 乙拿4個(gè),甲拿2個(gè)。

         最后肯定剩一個(gè),并輪到乙拿。

3. 實(shí)現(xiàn)atoi()和itoa()

4. 給定一個(gè)int型數(shù)n,寫一個(gè)盡可能簡(jiǎn)單的函數(shù)判斷n是否為2的冪,不能用循環(huán)。

   答:bool foo(int n)

          {

                int a=n;

               if(n<=0) return false;

               a=((a&0xAAAAAAAA)>>1)+(a&0x55555555);

               a=((a&0xCCCCCCCC)>>2)+(a&0x33333333);

               a=((a&0xF0F0F0F0)>>4)+(a&0x0F0F0F0F);

               a=((a&0xFF00FF00)>>8)+(a&0x00FF00FF);

               a=((a&0xFFFF0000)>>16)+(a&0x0000FFFF);

               if(a==1) return true;

               else return false;

           }

簡(jiǎn)答題:

1. 哪些方法可以避免或減少鎖的使用?

2. release版本的可執(zhí)行程序?yàn)槭裁捶浅4螅?/p>

3. 使用C++賦值運(yùn)算符應(yīng)注意什么地方?

4. strcpy()為什么會(huì)造成緩沖區(qū)溢出?可用哪個(gè)函數(shù)替代?

5. 阻塞模式的recv在沒受到數(shù)據(jù)的情況下如何返回?(不能將socket修改為非阻塞)

8. 有紅、綠、藍(lán)三色球分別3,2,1個(gè)。取任意兩個(gè)不同顏色的球都會(huì)使它們變成第三種顏色的兩個(gè)球。問最少取多少次,可使這些球都變成同一種顏色?

   答:無論多少次,都不可以使這些球變成同一種顏色,分析:

         一、對(duì)于(R,R,R,G,G,B)即(3,2,1),有:

                i.   (R,G) ---> (B,B,B,R,R,G)即(3,2,1)

                ii. (R,B)   ---> (G,G,G,G,R,R)即(4,2)

                iii. (G,B) ---> (R,R,R,R,R,G)即(5,1)

          二、對(duì)于(G,G,G,G,R,R)即(4,2),有 :

                i. (R,G) ---> (G,G,G,B,B,R)即(3,2,1)

          三、對(duì)于(R,R,R,R,R,G)即(5,1)有 :

                i. (R,G) ---> (R,R,R,R,B,B)即(4,2)

          因此,只有三種狀態(tài)(3,2,1), (4,2)和(5,1),不可能出現(xiàn)(6,0)這種情況。   

9. 哪些方法可讓一個(gè)進(jìn)程僅有一個(gè)實(shí)例運(yùn)行?

10. exit()和_exit() 的區(qū)別。

11. 紅黑樹比AVL樹的優(yōu)勢(shì)在哪?

12. 軟件開發(fā)過程包含哪些階段?各階段質(zhì)量保證措施是什么?

posted @ 2009-10-15 11:59 life02 閱讀(1898) | 評(píng)論 (4)編輯 收藏

網(wǎng)易2007Hust游戲開發(fā)工程師筆試

1.拼七巧板,還是比較有意思的(10分)

2.判斷下列圖案中哪一個(gè)與其他三個(gè)不同。(10)

 


       A                           B                            C                          D

3.有一個(gè)隊(duì)列長(zhǎng)一百米,有一個(gè)人從尾走到頭,再從頭走到尾,期間他的速度和隊(duì)列的速度都不變,隊(duì)列正好行進(jìn)了100米,問這個(gè)人走了多少距離。(10)

 

4.推理題。關(guān)于白帽、黑帽的,可以網(wǎng)上搜搜類似的。(10)

 

5.一個(gè)文章系統(tǒng),用戶登陸后輸出歡迎信息:(20)

1.用戶注冊(cè)時(shí)間不足一個(gè)月,輸出信息A:歡迎新用戶,您還沒有發(fā)表文章,可以先熟悉一下系統(tǒng),查看幫助信息。

2.用戶注冊(cè)時(shí)間不足一個(gè)月,輸出信息B:歡迎新用戶,您已經(jīng)發(fā)表了文章,不過在最初一個(gè)月發(fā)表3篇或3篇以上文章會(huì)對(duì)以后很有幫助。

3.用戶注冊(cè)時(shí)間小于三個(gè)月,輸出信息C:用戶您好,在最初一個(gè)月后您沒有發(fā)表文章,請(qǐng)多多努力。

4.用戶注冊(cè)大于三個(gè)月,輸出信息D:用戶您好,最近3個(gè)月您都未發(fā)表文章,如果長(zhǎng)時(shí)間不發(fā)表文章,您的帳號(hào)將被凍結(jié)。

5.其他情況輸出E:歡迎您的登陸。

 

1)畫出流程圖

2)寫出實(shí)現(xiàn)代碼,不需要定義變量類型

 

相關(guān)函數(shù)

GetRegisterTime(username)
 獲得用戶username的注冊(cè)時(shí)間
 
GetNowTime()
 獲得現(xiàn)在時(shí)間
 
TimeDiff(time1,time2)
 獲得time1到time2的天數(shù)
 
AddDay(time1,day_num)
 在time1上加上天數(shù),可以為負(fù),得到新時(shí)間
 
GetArticleCount(username,time1,time2)
 獲得用戶在time1和time2之間發(fā)表的文章數(shù)量
 
Print(A)
 輸出信息A,可以將A換成B、C等等
 

如有其他函數(shù)請(qǐng)自己定義并說明用途。

6.計(jì)算概率,具體不記得了。(10)

7.英文題目Next Number。(20)

大意就是要根據(jù)輸入數(shù)字,輸出一個(gè)新數(shù),要求輸出數(shù)字各個(gè)位的和加起來與原數(shù)相等。輸出的數(shù)字是大于原數(shù)的第一個(gè)數(shù)。

 

如Input:113,output:122,Input 0050,output: 0104。

輸入的N位數(shù)字k(0<=k<=101000,0<=N<2000)。

設(shè)計(jì)完成函數(shù),用偽碼實(shí)現(xiàn)。

 

游戲研發(fā)工程師必做題

1.一個(gè)游戲,角色屬性有:生命、攻擊、速度、防御、魔法,試設(shè)計(jì)一個(gè)角色的數(shù)據(jù)結(jié)構(gòu),用代碼實(shí)現(xiàn)。

2.若該游戲發(fā)布了資料篇,資料篇中角色屬性添加了兩個(gè):魔防、敏捷?,F(xiàn)改進(jìn)原設(shè)計(jì),怎么區(qū)分老版游戲和資料篇玩家,并正確讀取。

3.在網(wǎng)絡(luò)游戲中GM通常有一定特權(quán)可以對(duì)角色屬性進(jìn)行修改,現(xiàn)有GM1,可以對(duì)角色的攻擊屬性修改,而不能對(duì)其他屬性修改,試設(shè)計(jì)系統(tǒng)(所有屬性都是可讀的)。GM的指令通常為以下模式://moveto x,y;移動(dòng)到x,y;//kick 用戶,踢出某一用戶。

 

2.最優(yōu)打怪路線

玩家從東往西進(jìn)行,打怪只能打南北的怪,消耗的能量與怪物離玩家的距離有關(guān),試找出一個(gè)最好的打怪路線。

注:玩家只能水平移動(dòng),怪物均是靜止的,不移動(dòng)。

 

1)證明該路線是最佳路線

2)代碼實(shí)現(xiàn)

 

3.用戶支付

1)某一網(wǎng)絡(luò)游戲用戶分為3種類型:計(jì)時(shí)用戶、包月用戶、合作用戶,合作用戶是與別的廠家合作,可能在某一段時(shí)間免費(fèi)或計(jì)費(fèi)與別的不同,試設(shè)計(jì)一個(gè)支付系統(tǒng),支付部分代碼實(shí)現(xiàn)。

2)后來又添加了一種用戶:道具收費(fèi)用戶,即玩家游戲時(shí)間免費(fèi),而是通過購買游戲中道具需要錢,4種用戶運(yùn)行于同一臺(tái)服務(wù)器,試改進(jìn)系統(tǒng)。


本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/qiluofei/archive/2007/10/20/1834263.aspx

posted @ 2009-10-15 10:42 life02 閱讀(2909) | 評(píng)論 (0)編輯 收藏

09.3.27更新  
     

        與玩游戲相比,寫游戲要復(fù)雜上千萬倍,除了需要掌握通用的編程技巧以外,還要有相當(dāng)?shù)膱D形學(xué),物理,數(shù)學(xué)基礎(chǔ),特別是在國(guó)內(nèi),由于相關(guān)資料的缺乏,更是讓初學(xué)者無從下手。下面總結(jié)了一些入門方法和比較容易入手的資料。


         首先你要精通一門高級(jí)語言,比如C++或者C#,其次,要有良好的英文閱讀能力。對(duì)游戲開發(fā)者來說英文閱讀能力是最重要也是最基本的工具之一,因?yàn)槟阌龅降拇蟛糠仲Y源都將是英文的,不要總等著別人為你翻譯。慢慢嘗試著閱讀英文資料,你會(huì)發(fā)現(xiàn)其實(shí)也并沒有那么難:)


         剛開始,你要做的就是選擇一門圖形API,一般就是DirectX或者OpenGL之間選一個(gè)。如果考慮到跨平臺(tái),那么OGL是首選. 如果只在ms的平臺(tái),則DX是首選。我對(duì)OGL并不是很了解,所以下面大部門資料都是和DX相關(guān)的。

         當(dāng)然,作為準(zhǔn)備工作之一,你首先要到DirectX Develop Center下載最新版的DirectX SDK。


         入門書籍非常重要,推薦<<Introduction to 3D Game Programming with DirectX 9.0>>(好像去年出了中文版)也就是傳說中的龍書,這可以說是最好的DX入門教材,F(xiàn)rank Luna從淺入深,討論了DX的方方面面。另外再配上<< Advanced 3D Game Programming With DirectX 9.0>>,書名雖然是advanced,但實(shí)際上沒有多少advanced級(jí)別的內(nèi)容??赐赀@兩本書,你基本上已經(jīng)對(duì)DirectX比較熟悉了。如果你希望學(xué)習(xí)XNA,也是一樣的,畢竟XNA是以DX為基礎(chǔ)。


         不要一開始就看圖形學(xué)的書,這個(gè)時(shí)候你對(duì)圖形編程還沒有一個(gè)基本的感性認(rèn)識(shí),因此八成看的云里霧里。不要以網(wǎng)上的教程和論壇提問作為主要學(xué)習(xí)途徑,找一本好書,系統(tǒng)學(xué)習(xí),效率才最高。不要馬上看SDK里的例子,很多圖形學(xué)的基本原理僅僅通過讀代碼是不會(huì)明白的。某些年代太過久遠(yuǎn)的書就不要看了,比如《windows游戲編程大師技巧》(總看到有人在找這本書)。有人說基本的思想總是不變的,可惜對(duì)于現(xiàn)代GPU來說,很多早期的技術(shù)和優(yōu)化技巧早就過時(shí)了。圖形編程是發(fā)展的非??斓募夹g(shù),看看GPU的發(fā)展速度,1~2年就是一代產(chǎn)品的革新。


          好了,入門之后,是你鞏固和拓展視野的階段。現(xiàn)在看計(jì)算機(jī)圖形學(xué)就比較合適了。吐血推薦<<Real-Time-Rendering>>,這本書算得上是所有圖形程序員的必讀書籍和參考手冊(cè)了。最近剛出了第三版(更新:已經(jīng)有電子版了)。可惜國(guó)內(nèi)只有第二版,稍微有點(diǎn)老,如果實(shí)在找不到第三版,還是值得一讀。國(guó)內(nèi)其他所有以圖形學(xué)命名的書都有一個(gè)共同點(diǎn):枯燥,過時(shí)。只需看看其中二維三維變換和曲線曲面表示的部分即可。如果這個(gè)時(shí)候發(fā)現(xiàn)你當(dāng)年數(shù)學(xué)沒有學(xué)好,那么有三本數(shù)學(xué)書是為游戲程序員量身定制的:<<3D Math Primer for Graphics and Game Development>>, <<Mathematics for 3D Game Programming and Computer Graphics>>和<<Essential Mathematics Guide 2nd Edition>>,第一本書有中文版,最后一本則是08年才出的新書。


         其實(shí)入門之后,就沒有固定的學(xué)習(xí)路線了,最好根據(jù)你感興趣的方向來學(xué)習(xí)。


Shader方面:《Cg_tutorial》和《The Complete Effect and HLSL Guide》都是不錯(cuò)的入門材料,當(dāng)然還有SDK文檔。<<Shaders for Game Programmers and Artists>>有大量入門的例子。<<Advanced Lighting And Materials With Shaders>>詳細(xì)介紹了各種光照模型和技術(shù)。<<GPU Gems>> 1~3冊(cè)肯定是必讀的,雖然有1,2有中文版,但某些翻譯并不是很理想,強(qiáng)烈建議直接看英文版。ShaderX系列也是很經(jīng)典的系列,每年出版一本,包含了最新的實(shí)時(shí)渲染技術(shù),如今已經(jīng)出了第6冊(cè)了。不過網(wǎng)絡(luò)上只能找到1~3冊(cè)。1,2冊(cè)大部分shader都是用asm寫的,不過看懂原理,轉(zhuǎn)換為HLSL也并不難。另外Nvidia SDK和ATI SDK也是學(xué)習(xí)shader的重要資源。最后還有剛出的<< Programming Vertex, Geometry, and Pixel Shaders>>


地形:<<Real Time 3D Terrain Engines Using C++ And DX9>>非常全面的討論了關(guān)于地形渲染的各種技術(shù),至少應(yīng)該把第5~9章都瀏覽一遍。之后便可以 到virtual terrain查閱近期的地形渲染技術(shù)。


模型導(dǎo)入和動(dòng)畫:<<Advanced Animation with DirectX>>,僅此一本足以。


物理:<<Game Physics>>和<<Game Physics Engine Development>>都不錯(cuò)。<<Real-time Collision Detection>>是碰撞檢測(cè)方面最好的書,可惜目前還沒有電子版。


LOD:<<Level of Detail for 3D Graphics>>


Ray tracing:<< Physical-Based Rendering - From Theory to Implementation>>


引擎設(shè)計(jì):說實(shí)話,這方面還沒有特別好的書,大概越是核心的內(nèi)容,越少有人愿意寫吧。<<3D Game Engine Architecture Engineering Real-Time Applications with Wild Magic>>只有第三章值得一讀。<<3D Game Engine Programming>>可以選部分感興趣的章節(jié)看看,不過總的來說,講的比較淺。更新:<<3D Game Engine Design, Second Edition>>出了影印版本,強(qiáng)烈推薦。最近發(fā)現(xiàn)<<Pro OGRE 3D Programming>>也很不錯(cuò),200多頁短小精干,但是可以讓讀者快速了解一個(gè)既有引擎的設(shè)計(jì)和構(gòu)架。


AI:<<Programming Game AI by Example>>非常不錯(cuò),好像還有中文版,備選<<Artificial Intelligence for Games>>。當(dāng)然<<AI Programming Wisdom>>系列也是必讀作品,不過目前網(wǎng)絡(luò)上只有1~2冊(cè)。

網(wǎng)絡(luò):%##@%...(本人是網(wǎng)絡(luò)白癡 +_+........)


綜合:<<Game Programming Gems>>系列,不過由于內(nèi)容涉及的過于廣泛,文章質(zhì)量參差不齊,選擇性閱讀就可以了。歷年GDC, Gamefest t,Siggraph等大型會(huì)議的paper也是應(yīng)該關(guān)注的。

         至于那些“All in one”或者n天較你寫出個(gè)FPS游戲的書就不要讀了,這類書的通病是什么都說了,結(jié)果什么也沒說清楚。


         除了書以外,再推薦一些不錯(cuò)的網(wǎng)絡(luò)資源:

www.GameDev.net 除了大量教程以外,論壇里多年累計(jì)下來的內(nèi)容保羅萬象。好好利用論壇搜索,你會(huì)發(fā)不管你多厲害,那里總有一些比你強(qiáng)大的人在很久以前就遇到了和你同樣的問題,并且給出了解決方案。

Nvidia和ATI的開發(fā)者中心

creators.xna.com XNA官方網(wǎng)站

www.gamasutra.com 與GameDev類似

www.beyond3d.com 這里的除了討論軟件以外,還能看到對(duì)硬件構(gòu)架的分析

www.ziggyware.com 最好的XNA教程網(wǎng)站

www.gameres.com 國(guó)內(nèi)唯一比較專業(yè)的游戲編程網(wǎng)站,可惜和GameDev相比就顯得太寒磣了-_-#

         當(dāng)然,不要忘了收集各大論壇里牛人們的blog:)

         最后,僅僅靠看書是不夠的,多寫多練才是王道。

ps:以上書籍,除了特別注明的以外,都是可以通過網(wǎng)絡(luò)或者書店入手的。
pps:不要找我要電子書,我能找到的,相信你也能找到,你找不到的,我肯定也沒有 :)

 

本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/soilwork/archive/2009/01/08/3731645.aspx

posted @ 2009-10-10 21:37 life02 閱讀(236) | 評(píng)論 (0)編輯 收藏

1、Java

Java編程語言(第三版)---Java四大名著----James Gosling(Java之父)

Java編程思想(第2版)----Java四大名著----Bruce Eckel

Java編程思想(第3版)----Java四大名著----------------Bruce Eckel

JAVA 2核心技術(shù) 卷I:基礎(chǔ)知識(shí)(原書第7版)---Java四大名著-----Cay Horstmann

JAVA 2核心技術(shù) 卷II:高級(jí)特性(原書第7版)----Java四大名著-----Cay Horstmann

Effective Java中文版------Java四大名著--------Joshua Bloch

精通Struts:基于MVC的Java Web設(shè)計(jì)與開發(fā)---孫衛(wèi)琴

精通Hibernate:Java對(duì)象持久化技術(shù)詳解---孫衛(wèi)琴

Tomcat與Java Web開發(fā)技術(shù)詳解------------孫衛(wèi)琴

Java與模式------------------------------閻宏


2、c#

C#程序設(shè)計(jì)-------Charles Petzold“windows編程泰山北斗”---C#語言“倚天屠龍雙劍”

C# Primer中文版--------Stanley B.Lippman---C#語言“倚天屠龍雙劍”

.NET框架程序設(shè)計(jì)(修訂版)--------Jeffrey Richter“windows編程泰山北斗”---.NET平臺(tái)四大天王

c#Windows程序設(shè)計(jì)----------Charles Petzold“windows編程泰山北斗”------.NET平臺(tái)四大天王

.NET程序設(shè)計(jì)技術(shù)內(nèi)幕-------------Jeff Prosise---.NET平臺(tái)四大天王

.NET本質(zhì)論--第1卷:公共語言運(yùn)行庫(中文版)--------Chris Sells---.NET平臺(tái)四大天王

 

3、C++

C++程序設(shè)計(jì)語言(特別版)---c++八大金剛----Bjarne Stroustrup“C++之父”

C++ Primer (第3版)中文版----c++八大金剛---Stanley B.Lippman

C++ Primer (第4版)中文版----c++八大金剛---Stanley B.Lippman

C++標(biāo)準(zhǔn)程序庫—自修教程與參考手冊(cè)--c++八大金剛--Nicolai M.Josuttis

C++語言的設(shè)計(jì)和演化-----c++八大金剛----Bjarne Stroustrup“C++之父”

深度探索C++對(duì)象模型---c++八大金剛----Stanley B.Lippman

Essential C++中文版---c++八大金剛---Stanley B.Lippman

Effective C++中文版 2nd Edition-----c++八大金剛------Scott Meyers

More Effective C++中文版----c++八大金剛------Scott Meyers

C++編程思想(第2版) 第1卷:標(biāo)準(zhǔn)C++導(dǎo)引--------Bruce Eckel

C++編程思想(第2版)第2卷:實(shí)用編程技術(shù) --------Bruce Eckel

C++程序設(shè)計(jì)--------------------------譚浩強(qiáng)

C++ 程序設(shè)計(jì)教程(第2版)--------------錢能

C++ Primer Plus(第五版)中文版---Stephen Prata

廣博如四庫全書The c++ programming language、c++ Primer
深?yuàn)W如山重水復(fù)Inside the c++ object model
程序庫大全The c++ standard libray
工程經(jīng)驗(yàn)之積累Effective c++、More Effective c++、Exceptional c++

 

c++八大金剛:
1、Essentital c++---lippman---C++之父,旁枝暫略,主攻核心,輕薄短小,初學(xué)者

2、The c++ programming language----C++之父,技術(shù)權(quán)威,用詞深峻,思想深遠(yuǎn),c++百科全書代表

3、c++ Primer----lippman---縱橫書市十?dāng)?shù)年,c++最佳教本,c++百科全書代表。
4、Inside the c++ object model-----lippman----揭示c++底層,非常好,非常難。
5、Effective c++-----通過50個(gè)編程實(shí)例,展示專家經(jīng)驗(yàn),行文有趣,深處淺出。
6、More Effective c++----通過35個(gè)編程實(shí)例,展示專家經(jīng)驗(yàn),行文有趣,深處淺出。
7、The c++ standard libray---c++標(biāo)準(zhǔn)庫的百科全書。
8、設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)


4、c

C程序設(shè)計(jì)語言(第2版·新版)---C語言“倚天屠龍雙劍”---Brian W.Kernighan“C語言之父”

C Primer Plus中文版(第五版)--------C語言“倚天屠龍雙劍”---Stephen Prata

C程序設(shè)計(jì)(第三版)---------------------------譚浩強(qiáng)

C語言大全(第四版)---------------------------HERBERT SCHILDT

C語言接口與實(shí)現(xiàn):創(chuàng)建可重用軟件的技術(shù)-------------DAVID R.HANSON  

C語言參考手冊(cè)(原書第5版)--------------------------Samuel P.Harbison

C程序設(shè)計(jì)教程---------------------------------H.M.Deitel/P.J.Deitel

C陷阱與缺陷-----------------------------------Andrew Koenig  


5、VB

Visual Basic .NET技術(shù)內(nèi)幕-----VB編程三劍客-----------Francesco Balena“vb首席大師”

Windows程序設(shè)計(jì)-Visual Basic.NET語言描述--VB編程三劍客-----Charles Petzold“windows編程泰山

北斗”---

.NET框架程序設(shè)計(jì):Visual Basic.NET語言描述--VB編程三劍客--Jeffrey Richter“windows編程泰山北

斗”---,F(xiàn)rancesco Balena“vb首席大師”  

Visual Basic 6編程技術(shù)大全------------------------Francesco Balena“vb首席大師”

Visual Basic.NET 從入門到精通-------------------------Petroutsos,E.

高級(jí)VISUAL BASIC編程-----------------------------------MATTHEW CURLAND  


6、Delphi

Inside VCL(深入核心——VCL架構(gòu)剖析)----------李維

Delphi 7高效數(shù)據(jù)庫程序設(shè)計(jì)--------------李維

面向?qū)ο箝_發(fā)實(shí)踐之路(Delphi版)----------李維


7、VC

Windows 程序設(shè)計(jì)(第5版)-----Charles Petzold“windows編程泰山北斗”---

Windows核心編程----------Jeffrey Richter“windows編程泰山北斗”---

Windows高級(jí)編程指南---------Jeffrey Richter“windows編程泰山北斗”---

深入淺出MFC(第二版)-----“MFC四大天王”-------侯捷

MFC Windows程序設(shè)計(jì)(第2版)---MFC四大天王”---------Jeff Prosise

Visual C++ 技術(shù)內(nèi)幕(第4版)--MFC四大天王”--------David Kruglinski

深入解析MFC-------------MFC四大天王”-----------George Shepherd

Visual C++.NET 技術(shù)內(nèi)幕(第6版)-MFC四大天王”------------David Kruglinski


8、vf

Visual Foxpro程序設(shè)計(jì)參考手冊(cè)-------------------張洪舉

專家門診——Visual FoxPro開發(fā)答疑160問-------------------張洪舉

Visual FoxPro 6.0/9.0解決方案與范例大全-------------------張洪舉

Visual FoxPro軟件開發(fā)模式與應(yīng)用案例-------------------張洪舉

 

9、黑客

應(yīng)用密碼學(xué)(協(xié)議算法與C源程序-----------Bruce Schneier

網(wǎng)絡(luò)信息安全的真相-----------Bruce Schneier

黑客大曝光:網(wǎng)絡(luò)安全機(jī)密與解決方案(第5版)--------STUART MCCLURE

軟件加密技術(shù)內(nèi)幕------------看雪學(xué)院

加密與解密——軟件保護(hù)技術(shù)與完全解決方案------------看雪學(xué)院

加密與解密(第二版)--------段鋼


10、匯編

Intel微處理器結(jié)構(gòu)、編程與接口(第六版)---------Barry B. Brey

80*86、奔騰機(jī)匯編語言程序設(shè)計(jì)---------Barry B. Brey

Windows環(huán)境下32位匯編語言程序設(shè)計(jì)(第2版)-----------羅云彬

IBM-PC匯編語言程序設(shè)計(jì)(第2版) 本書是國(guó)內(nèi)優(yōu)秀教材--------沈美明 溫冬嬋

IBM PC匯編語言程序設(shè)計(jì)(第五版) 這本書籍是國(guó)外優(yōu)秀教材-------PETER ABEL著,沈美明 溫冬蟬譯


11、驅(qū)動(dòng)開發(fā)

Windows WDM設(shè)備驅(qū)動(dòng)程序開發(fā)指南------------------------------------ Chris Cant

Windows 2000/XP WDM設(shè)備驅(qū)動(dòng)程序開發(fā)(第2版)--------------------------武安河

WINDOWS 2000/XP WDM設(shè)備驅(qū)動(dòng)程序開發(fā)-------------------------------- 武安河


12、網(wǎng)絡(luò)

計(jì)算機(jī)網(wǎng)絡(luò)第四版中文版----網(wǎng)絡(luò)編程三劍客--------------Andrew S.Tanenbaum


TCP/IP詳解3卷本--------------------Richard Stevens----網(wǎng)絡(luò)編程三劍客

UNIX網(wǎng)絡(luò)編程2卷本--------------------Richard Stevens----網(wǎng)絡(luò)編程三劍客

用TCP/IP進(jìn)行網(wǎng)際互聯(lián)-----------Douglas E. Comer

高級(jí)TCP/IP編程-------------------Jon C. Snader

C++網(wǎng)絡(luò)編程-----------------------Douglas Schmidt

UNIX環(huán)境高級(jí)編程(第2版)--------------------Richard Stevens

 

13、算法

計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)-------Donald.E.Knuth----------算法“倚天屠龍”雙劍

算法導(dǎo)論-----------------Thomas H. Cormen--------算法“倚天屠龍”雙劍

離散數(shù)學(xué)及其應(yīng)用----------Kenneth H.Rosen

具體數(shù)學(xué)—計(jì)算機(jī)科學(xué)基礎(chǔ)--------Donald.E.Knuth

 

14、圖形編程
Windows 圖形編程----------------FENG YUAN --圖形編程界的Charles Petzold之書


15、數(shù)據(jù)結(jié)構(gòu)

數(shù)據(jù)結(jié)構(gòu) C++語言描述》58.00(Data Structures C++) William Ford,William Topp 劉衛(wèi)東 沈官林

數(shù)據(jù)結(jié)構(gòu)算法與應(yīng)用-C++語言描述》49.00Sartej Sahni 汪詩林 孫曉東等機(jī)械工業(yè)出版社

 

16、軟件工程

設(shè)計(jì)模式--可復(fù)用面向?qū)ο筌浖幕A(chǔ)

重構(gòu)—改善既有代碼的設(shè)計(jì)

 

17、操作系統(tǒng)

深入理解計(jì)算機(jī)系統(tǒng)(修訂版)-------RANDAL E.BRYANT

 

18、Unix


UNIX 網(wǎng)絡(luò)編程 卷I 套接字聯(lián)網(wǎng)API(英文版 第三版
UNIX 編程藝術(shù)
UNIX環(huán)境高級(jí)編程(英文影印第2版-----UNIX編程“圣經(jīng)
UNIX環(huán)境高級(jí)編程(英文影印版)(第2版)
99-UNIX環(huán)境高級(jí)編程(第2版)
UNIX環(huán)境高級(jí)編程(第2版)---UNIX編程“圣經(jīng)
UNIX網(wǎng)絡(luò)編程 第1卷:套接口API(第3版)
UNIX網(wǎng)絡(luò)編程卷2:進(jìn)程間通信(第2版)(英文影印版)
UNIX 網(wǎng)絡(luò)編程(第二版)第2卷:進(jìn)程間通信
UNIX編程環(huán)境
UNIX 網(wǎng)絡(luò)編程 卷I 套接字聯(lián)網(wǎng)API(英文版 第三版
UNIX系統(tǒng)編程
UNIX環(huán)境高級(jí)編程
UNIX環(huán)境高級(jí)編程(英文影印版
88-LINUX內(nèi)核分析及編程
UNIX 網(wǎng)絡(luò)編程 卷I 套接字聯(lián)網(wǎng)API(英文版 第三版)
UNIX網(wǎng)絡(luò)編程 第1卷:套接口API(第3版)
UNIX 網(wǎng)絡(luò)編程(第二版)第2卷:進(jìn)程間通信
UNIX網(wǎng)絡(luò)編程卷2:進(jìn)程間通信(第2版)(英文影印版)
UNIX 網(wǎng)絡(luò)編程(第2版)第1卷:套接口API和X/Open 傳輸接口API
UNIX網(wǎng)絡(luò)編程(卷1):連網(wǎng)的APLS:套接字與XTI(第二版)(英文影印版)
UNIX環(huán)境高級(jí)編程
UNIX 環(huán)境高級(jí)編程(英文版)
UNIX環(huán)境高級(jí)編程(第2版)
Unix技術(shù)手冊(cè)

 

19、Linux


Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)
Linux內(nèi)核完全注釋
LINUX內(nèi)核分析及編程
GNU/Linux 編程指南(第二版)
Linux設(shè)備驅(qū)動(dòng)程序(第三版)
嵌入式設(shè)計(jì)及Linux驅(qū)動(dòng)開發(fā)指南——基于ARM 9處理器
Linux設(shè)備驅(qū)動(dòng)程序 第三版(英文影印版)
Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)(第2版)
Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)(英文影印版)(第2版)
linux技術(shù)手冊(cè)


20、游戲編程

Windows游戲編程大師技巧(第二版
游戲之旅--我的編程感悟
OpenGL超級(jí)寶典:第三版
OpenGL編程指南(第四版)
Java 游戲高級(jí)編程
J2ME手機(jī)游戲編程入門
游戲之旅——我的編程感悟
游戲開發(fā)中的人工智能(英文影印版)
3D游戲:卷2 動(dòng)畫與高級(jí)實(shí)時(shí)渲染技術(shù)
面向?qū)ο蟮挠螒蜷_發(fā)
Java 游戲高級(jí)編程
3D游戲編程大師技巧
游戲編程精粹
面向?qū)ο蟮挠螒蜷_發(fā)
3D游戲 卷1:實(shí)時(shí)渲染與軟件技術(shù)
3D游戲:卷2 動(dòng)畫與高級(jí)實(shí)時(shí)渲染技…
J2ME手機(jī)游戲編程入門
Direct3D游戲編程入門教程(第二版…

 

 

21、移動(dòng)開發(fā)

Windows Mobile手機(jī)應(yīng)用開發(fā)
SYMBIAN OS C++手機(jī)應(yīng)用開發(fā)
68-Windows Mobile手機(jī)應(yīng)用開發(fā)--傅曦 齊宇 徐駿
48-SYMBIAN OS C++手機(jī)應(yīng)用開發(fā) (第2卷)------------------RICHARD HARRISON著,周良忠 王伯欣譯
68-SYMBIAN OS C++手機(jī)應(yīng)用開發(fā)---------------RICHARD HARRISON著,周良忠譯  
Windows CE.net內(nèi)核定制及應(yīng)用程序開發(fā)---------周毓林 寧楊 陸貴強(qiáng) 付林林
嵌入式系統(tǒng)Windows CE 開發(fā)技巧與實(shí)例--傅曦
Palm OS編程實(shí)踐---絕版

 

22、單片機(jī)

單片機(jī)輕松入門----------------------------------周堅(jiān)(平凡老師)  

單片機(jī)典型模塊設(shè)計(jì)實(shí)例導(dǎo)航-----------------------求是科技

例說8051----------------------------------------張義和 陳敵北

KEIL CX51 V7.0單片機(jī)高級(jí)語言編程與ΜVISION2應(yīng)用實(shí)踐-----徐愛鈞  

單片機(jī)應(yīng)用程序設(shè)計(jì)技術(shù)(修訂版)--------------------周航慈

8051單片機(jī)實(shí)踐與應(yīng)用-------------------------------吳金戎

MCS-51系列單片機(jī)實(shí)用接口技術(shù)---------------------李華

23、串并口通訊

Visual C++/Turbo C串口通信編程實(shí)踐------------------龔建偉

VISUAL BASIC與RS-232串行通信控制(最新版)----------范逸之

 

24、電子

無線電識(shí)圖與電路故障分析輕松入門(第二版) -------------------胡斌

無線電元器件檢測(cè)與修理技術(shù)輕松入門(第二版) -------------------胡斌

圖表細(xì)說電子技術(shù)識(shí)圖-------------------胡斌

圖表細(xì)說電子元器件-------------------胡斌

圖表細(xì)說元器件及實(shí)用電路-------------------胡斌


 

posted @ 2009-10-09 18:47 life02 閱讀(312) | 評(píng)論 (0)編輯 收藏

來自bc-cn C語言論壇

       在C語言的學(xué)習(xí)中,對(duì)內(nèi)存管理這部分的知識(shí)掌握尤其重要!之前對(duì)C中的malloc()和free()兩個(gè)函數(shù)的了解甚少,只知道大概該怎么用——就是malloc然后free就一切OK了。當(dāng)然現(xiàn)在對(duì)這兩個(gè)函數(shù)的體會(huì)也不見得多,不過對(duì)于本文章第三部分的內(nèi)容倒是有了轉(zhuǎn)折性的認(rèn)識(shí),所以寫下這篇文章作為一個(gè)對(duì)知識(shí)的總結(jié)。這篇文章之所以命名中有個(gè)“淺談”的字眼,也就是這個(gè)意思了!希望對(duì)大家有一點(diǎn)幫助!

       如果不扯得太遠(yuǎn)的話(比如說操作系統(tǒng)中虛擬內(nèi)存和物理內(nèi)存如何運(yùn)做如何管理之類的知識(shí)等),我感覺這篇文章應(yīng)該是比較全面地談了一下malloc()和free().這篇文章由淺入深(不見得有多深)分三個(gè)部分介紹主要內(nèi)容。

廢話了那么多,下面立刻進(jìn)入主題================》》》》》》》》》》》》》》》》》》》》》


一、malloc()和free()的基本概念以及基本用法:

1、函數(shù)原型及說明:

void *malloc(long NumBytes):該函數(shù)分配了NumBytes個(gè)字節(jié),并返回了指向這塊內(nèi)存的指針。如果分配失敗,則返回一個(gè)空指針(NULL)。

關(guān)于分配失敗的原因,應(yīng)該有多種,比如說空間不足就是一種。

void free(void *FirstByte): 該函數(shù)是將之前用malloc分配的空間還給程序或者是操作系統(tǒng),也就是釋放了這塊內(nèi)存,讓它重新得到自由。

2、函數(shù)的用法:

     其實(shí)這兩個(gè)函數(shù)用起來倒不是很難,也就是malloc()之后覺得用夠了就甩了它把它給free()了,舉個(gè)簡(jiǎn)單例子:

        // Code...

        char *Ptr = NULL;

        Ptr = (char *)malloc(100 * sizeof(char));

        if (NULL == Ptr){
            exit (1);
        }

        gets(Ptr);

        // code...

        free(Ptr);

        Ptr = NULL;

        // code...

       就是這樣!當(dāng)然,具體情況要具體分析以及具體解決。比如說,你定義了一個(gè)指針,在一個(gè)函數(shù)里申請(qǐng)了一塊內(nèi)存然后通過函數(shù)返回傳遞給這個(gè)指針,那么也許釋放這塊內(nèi)存這項(xiàng)工作就應(yīng)該留給其他函數(shù)了。

3、關(guān)于函數(shù)使用需要注意的一些地方:

A、申請(qǐng)了內(nèi)存空間后,必須檢查是否分配成功。

B、當(dāng)不需要再使用申請(qǐng)的內(nèi)存時(shí),記得釋放;釋放后應(yīng)該把指向這塊內(nèi)存的指針指向NULL,防止程序后面不小心使用了它。

C、這兩個(gè)函數(shù)應(yīng)該是配對(duì)。如果申請(qǐng)后不釋放就是內(nèi)存泄露;如果無故釋放那就是什么也沒有做。釋放只能一次,如果釋放兩次及兩次以上會(huì)出現(xiàn)錯(cuò)誤(釋放空指針例外,釋放空指針其實(shí)也等于啥也沒做,所以釋放空指針釋放多少次都沒有問題)。

D、雖然malloc()函數(shù)的類型是(void *),任何類型的指針都可以轉(zhuǎn)換成(void *),但是最好還是在前面進(jìn)行強(qiáng)制類型轉(zhuǎn)換,因?yàn)檫@樣可以躲過一些編譯器的檢查。


二、malloc()到底從哪里得來了內(nèi)存空間:

1、malloc()到底從哪里得到了內(nèi)存空間?答案是從堆里面獲得空間。也就是說函數(shù)返回的指針是指向堆里面的一塊內(nèi)存。操作系統(tǒng)中有一個(gè)記錄空閑內(nèi)存地址的鏈表。當(dāng)操作系統(tǒng)收到程序的申請(qǐng)時(shí),就會(huì)遍歷該鏈表,然后就尋找第一個(gè)空間大于所申請(qǐng)空間的堆結(jié)點(diǎn),然后就將該結(jié)點(diǎn)從空閑結(jié)點(diǎn)鏈表中刪除,并將該結(jié)點(diǎn)的空間分配給程序。就是這樣!

   說到這里,不得不另外插入一個(gè)小話題,相信大家也知道是什么話題了。什么是堆?說到堆,又忍不住說到了棧!什么是棧?下面就另外開個(gè)小部分專門而又簡(jiǎn)單地說一下這個(gè)題外話:

2、什么是堆:堆是大家共有的空間,分全局堆和局部堆。全局堆就是所有沒有分配的空間,局部堆就是用戶分配的空間。堆在操作系統(tǒng)對(duì)進(jìn)程 初始化的時(shí)候分配,運(yùn)行過程中也可以向系統(tǒng)要額外的堆,但是記得用完了要還給操作系統(tǒng),要不然就是內(nèi)存泄漏。

   什么是棧:棧是線程獨(dú)有的,保存其運(yùn)行狀態(tài)和局部自動(dòng)變量的。棧在線程開始的時(shí)候初始化,每個(gè)線程的?;ハ嗒?dú)立。每個(gè)函數(shù)都有自己的棧,棧被用來在函數(shù)之間傳遞參數(shù)。操作系統(tǒng)在切換線程的時(shí)候會(huì)自動(dòng)的切換棧,就是切換SS/ESP寄存器。??臻g不需要在高級(jí)語言里面顯式的分配和釋放。

   以上的概念描述是標(biāo)準(zhǔn)的描述,不過有個(gè)別語句被我刪除,不知道因?yàn)檫@樣而變得不標(biāo)準(zhǔn)了^_^.

   通過上面對(duì)概念的描述,可以知道:

   棧是由編譯器自動(dòng)分配釋放,存放函數(shù)的參數(shù)值、局部變量的值等。操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。

   堆一般由程序員分配釋放,若不釋放,程序結(jié)束時(shí)可能由OS回收。注意這里說是可能,并非一定。所以我想再強(qiáng)調(diào)一次,記得要釋放!

注意它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式倒是類似于鏈表。(這點(diǎn)我上面稍微提過)


   所以,舉個(gè)例子,如果你在函數(shù)上面定義了一個(gè)指針變量,然后在這個(gè)函數(shù)里申請(qǐng)了一塊內(nèi)存讓指針指向它。實(shí)際上,這個(gè)指針的地址是在棧上,但是它所指向的內(nèi)容卻是在堆上面的!這一點(diǎn)要注意!所以,再想想,在一個(gè)函數(shù)里申請(qǐng)了空間后,比如說下面這個(gè)函數(shù):

   // code...

       void Function(void)
       {
           char *p = (char *)malloc(100 * sizeof(char));
       }

       就這個(gè)例子,千萬不要認(rèn)為函數(shù)返回,函數(shù)所在的棧被銷毀指針也跟著銷毀,申請(qǐng)的內(nèi)存也就一樣跟著銷毀了!這絕對(duì)是錯(cuò)誤的!因?yàn)樯暾?qǐng)的內(nèi)存在堆上,而函數(shù)所在的棧被銷毀跟堆完全沒有啥關(guān)系。所以,還是那句話:記得釋放!

3、free()到底釋放了什么

        這個(gè)問題比較簡(jiǎn)單,其實(shí)我是想和第二大部分的題目相呼應(yīng)而已!哈哈!free()釋放的是指針指向的內(nèi)存!注意!釋放的是內(nèi)存,不是指針!這點(diǎn)非常非常重要!指針是一個(gè)變量,只有程序結(jié)束時(shí)才被銷毀。釋放了內(nèi)存空間后,原來指向這塊空間的指針還是存在!只不過現(xiàn)在指針指向的內(nèi)容的垃圾,是未定義的,所以說是垃圾。因此,前面我已經(jīng)說過了,釋放內(nèi)存后把指針指向NULL,防止指針在后面不小心又被解引用了。非常重要啊這一點(diǎn)!

       好了!這個(gè)“題外話”終于說完了。就這么簡(jiǎn)單說一次,知道個(gè)大概就可以了!下面就進(jìn)入第三個(gè)部分:

三、malloc()以及free()的機(jī)制:

       這個(gè)部分我今天才有了新的認(rèn)識(shí)!而且是轉(zhuǎn)折性的認(rèn)識(shí)!所以,這部分可能會(huì)有更多一些認(rèn)識(shí)上的錯(cuò)誤!不對(duì)的地方請(qǐng)大家?guī)兔χ赋觯?/p>

       事實(shí)上,仔細(xì)看一下free()的函數(shù)原型,也許也會(huì)發(fā)現(xiàn)似乎很神奇,free()函數(shù)非常簡(jiǎn)單,只有一個(gè)參數(shù),只要把指向申請(qǐng)空間的指針傳遞給free()中的參數(shù)就可以完成釋放工作!這里要追蹤到malloc()的申請(qǐng)問題了。申請(qǐng)的時(shí)候?qū)嶋H上占用的內(nèi)存要比申請(qǐng)的大。因?yàn)槌龅目臻g是用來記錄對(duì)這塊內(nèi)存的管理信息。先看一下在《UNIX環(huán)境高級(jí)編程》中第七章的一段話:

       大多數(shù)實(shí)現(xiàn)所分配的存儲(chǔ)空間比所要求的要稍大一些,額外的空間用來記錄管理信息——分配塊的長(zhǎng)度,指向下一個(gè)分配塊的指針等等。這就意味著如果寫過一個(gè)已分配區(qū)的尾端,則會(huì)改寫后一塊的管理信息。這種類型的錯(cuò)誤是災(zāi)難性的,但是因?yàn)檫@種錯(cuò)誤不會(huì)很快就暴露出來,所以也就很難發(fā)現(xiàn)。將指向分配塊的指針向后移動(dòng)也可能會(huì)改寫本塊的管理信息。

       以上這段話已經(jīng)給了我們一些信息了。malloc()申請(qǐng)的空間實(shí)際我覺得就是分了兩個(gè)不同性質(zhì)的空間。一個(gè)就是用來記錄管理信息的空間,另外一個(gè)就是可用空間了。而用來記錄管理信息的實(shí)際上是一個(gè)結(jié)構(gòu)體。在C語言中,用結(jié)構(gòu)體來記錄同一個(gè)對(duì)象的不同信息是天經(jīng)地義的事!下面看看這個(gè)結(jié)構(gòu)體的原型:

   struct mem_control_block {

       int is_available;    //這是一個(gè)標(biāo)記?

       int size;            //這是實(shí)際空間的大小

    };

       對(duì)于size,這個(gè)是實(shí)際空間大小。這里其實(shí)我有個(gè)疑問,is_available是否是一個(gè)標(biāo)記?因?yàn)槲铱戳薴ree()的源代碼之后對(duì)這個(gè)變量感覺有點(diǎn)納悶(源代碼在下面分析)。這里還請(qǐng)大家指出!

       所以,free()就是根據(jù)這個(gè)結(jié)構(gòu)體的信息來釋放malloc()申請(qǐng)的空間!而結(jié)構(gòu)體的兩個(gè)成員的大小我想應(yīng)該是操作系統(tǒng)的事了。但是這里有一個(gè)問題,malloc()申請(qǐng)空間后返回一個(gè)指針應(yīng)該是指向第二種空間,也就是可用空間!不然,如果指向管理信息空間的話,寫入的內(nèi)容和結(jié)構(gòu)體的類型有可能不一致,或者會(huì)把管理信息屏蔽掉,那就沒法釋放內(nèi)存空間了,所以會(huì)發(fā)生錯(cuò)誤?。ǜ杏X自己這里說的是廢話)

       好了!下面看看free()的源代碼,我自己分析了一下,覺得比起malloc()的源代碼倒是容易簡(jiǎn)單很多。只是有個(gè)疑問,下面指出!

   // code...

  
       void free(void *ptr)
       {

            struct mem_control_block *free;

            free = ptr - sizeof(struct mem_control_block);

            free->is_available = 1;

            return;
       }

        看一下函數(shù)第二句,這句非常重要和關(guān)鍵。其實(shí)這句就是把指向可用空間的指針倒回去,讓它指向管理信息的那塊空間,因?yàn)檫@里是在值上減去了一個(gè)結(jié)構(gòu)體的大??!后面那一句free->is_available = 1;我有點(diǎn)納悶!我的想法是:這里is_available應(yīng)該只是一個(gè)標(biāo)記而已!因?yàn)閺倪@個(gè)變量的名稱上來看,is_available 翻譯過來就是“是可以用”。不要說我土!我覺得變量名字可以反映一個(gè)變量的作用,特別是嚴(yán)謹(jǐn)?shù)拇a。這是源代碼,所以我覺得絕對(duì)是嚴(yán)謹(jǐn)?shù)模?!這個(gè)變量的值是1,表明是可以用的空間!只是這里我想了想,如果把它改為0或者是其他值不知道會(huì)發(fā)生什么事?!但是有一點(diǎn)我可以肯定,就是釋放絕對(duì)不會(huì)那么順利進(jìn)行!因?yàn)檫@是一個(gè)標(biāo)記!

       當(dāng)然,這里可能還是有人會(huì)有疑問,為什么這樣就可以釋放呢??我剛才也有這個(gè)疑問。后來我想到,釋放是操作系統(tǒng)的事,那么就free()這個(gè)源代碼來看,什么也沒有釋放,對(duì)吧?但是它確實(shí)是確定了管理信息的那塊內(nèi)存的內(nèi)容。所以,free()只是記錄了一些信息,然后告訴操作系統(tǒng)那塊內(nèi)存可以去釋放,具體怎么告訴操作系統(tǒng)的我不清楚,但我覺得這個(gè)已經(jīng)超出了我這篇文章的討論范圍了。

       那么,我之前有個(gè)錯(cuò)誤的認(rèn)識(shí),就是認(rèn)為指向那塊內(nèi)存的指針不管移到那塊內(nèi)存中的哪個(gè)位置都可以釋放那塊內(nèi)存!但是,這是大錯(cuò)特錯(cuò)!釋放是不可以釋放一部分的!首先這點(diǎn)應(yīng)該要明白。而且,從free()的源代碼看,ptr只能指向可用空間的首地址,不然,減去結(jié)構(gòu)體大小之后一定不是指向管理信息空間的首地址。所以,要確保指針指向可用空間的首地址!不信嗎?自己可以寫一個(gè)程序然后移動(dòng)指向可用空間的指針,看程序會(huì)有會(huì)崩!

       最后可能想到malloc()的源代碼看看malloc()到底是怎么分配空間的,這里面涉及到很多其他方面的知識(shí)!有興趣的朋友可以自己去下載源
代碼去看看。


四、關(guān)于其他:

        關(guān)于C中的malloc()和free()的討論就寫到這里吧!寫了三個(gè)鐘頭,感覺有點(diǎn)累!希望對(duì)大家有所幫助!有不對(duì)的地方歡迎大家指出!最后,謝謝參與這個(gè)帖子討論的所有朋友,帖子:http://www.bc-cn.net/bbs/dispbbs.asp?boardID=5&ID=81781&page=1

posted @ 2009-10-09 13:02 life02 閱讀(252) | 評(píng)論 (0)編輯 收藏

malloc/free和new/delete的區(qū)別
2009年08月18日 星期二 11:26

有了malloc/free為什么還要new/delete ?
        malloc與free是C++/C語言的標(biāo)準(zhǔn)庫函數(shù),new/delete是C++的運(yùn)算符。它們都可用于申請(qǐng)動(dòng)態(tài)內(nèi)存和釋放內(nèi)存。

對(duì)于非內(nèi)部數(shù)據(jù)類型的對(duì)象而言,光用maloc/free無法滿足動(dòng)態(tài)對(duì)象的要求。對(duì)象在創(chuàng)建的同時(shí)要自動(dòng)執(zhí)行構(gòu)造函數(shù),對(duì)象在消亡之前要自動(dòng)執(zhí)行析構(gòu)函數(shù)。由于malloc/free是庫函數(shù)而不是運(yùn)算符,不在編譯器控制權(quán)限之內(nèi),不能夠把執(zhí)行構(gòu)造函數(shù)和析構(gòu)函數(shù)的任務(wù)強(qiáng)加于malloc/free。

        因此C++語言需要一個(gè)能完成動(dòng)態(tài)內(nèi)存分配和初始化工作的運(yùn)算符new,以及一個(gè)能完成清理與釋放內(nèi)存工作的運(yùn)算符delete。注意new/delete不是庫函數(shù)。

我們先看一看malloc/free和new/delete如何實(shí)現(xiàn)對(duì)象的動(dòng)態(tài)內(nèi)存管理,見示例7-8。



class Obj

{

public :

         Obj(void){ cout << “Initialization” << endl; }

~Obj(void){ cout << “Destroy” << endl; }

void     Initialize(void){ cout << “Initialization” << endl; }

void     Destroy(void){ cout << “Destroy” << endl; }

};

void UseMallocFree(void)

{

     Obj   *a = (obj *)malloc(sizeof(obj));    // 申請(qǐng)動(dòng)態(tài)內(nèi)存

     a->Initialize();                         // 初始化

     //…

     a->Destroy();    // 清除工作

     free(a);         // 釋放內(nèi)存

}

void UseNewDelete(void)

{

     Obj   *a = new Obj;   // 申請(qǐng)動(dòng)態(tài)內(nèi)存并且初始化

     //…

     delete a;            // 清除并且釋放內(nèi)存

}


示例7-8 用malloc/free和new/delete如何實(shí)現(xiàn)對(duì)象的動(dòng)態(tài)內(nèi)存管理



類Obj的函數(shù)Initialize模擬了構(gòu)造函數(shù)的功能,函數(shù)Destroy模擬了析構(gòu)函數(shù)的功能。函數(shù)UseMallocFree中,由于malloc/free不能執(zhí)行構(gòu)造函數(shù)與析構(gòu)函數(shù),必須調(diào)用成員函數(shù)Initialize和Destroy來完成初始化與清除工作。函數(shù)UseNewDelete則簡(jiǎn)單得多。

所以我們不要企圖用malloc/free來完成動(dòng)態(tài)對(duì)象的內(nèi)存管理,應(yīng)該用new/delete。由于內(nèi)部數(shù)據(jù)類型的“對(duì)象”沒有構(gòu)造與析構(gòu)的過程,對(duì)它們而言malloc/free和new/delete是等價(jià)的。

     既然new/delete的功能完全覆蓋了malloc/free,為什么C++不把malloc/free淘汰出局呢?這是因?yàn)镃++程序經(jīng)常要調(diào)用C函數(shù),而C程序只能用malloc/free管理動(dòng)態(tài)內(nèi)存。

如果用free釋放“new創(chuàng)建的動(dòng)態(tài)對(duì)象”,那么該對(duì)象因無法執(zhí)行析構(gòu)函數(shù)而可能導(dǎo)致程序出錯(cuò)。如果用delete釋放“malloc申請(qǐng)的動(dòng)態(tài)內(nèi)存”,理論上講程序不會(huì)出錯(cuò),但是該程序的可讀性很差。所以new/delete必須配對(duì)使用,malloc/free也一樣。

posted @ 2009-10-09 13:01 life02 閱讀(312) | 評(píng)論 (0)編輯 收藏

僅列出標(biāo)題
共20頁: First 12 13 14 15 16 17 18 19 20 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品户外野外| 欧美一区二区三区四区在线| 夜夜嗨av一区二区三区网站四季av| 亚洲三级免费| 欧美日韩直播| 久久国产精品久久久久久电车| 欧美激情亚洲精品| 宅男噜噜噜66一区二区66| 国产一区二区三区久久久| 欧美刺激性大交免费视频| 日韩视频在线一区二区| 久久精品五月婷婷| 亚洲精品国偷自产在线99热| 欧美日韩视频在线一区二区观看视频 | 久久精品人人做人人综合| 亚洲黑丝在线| 午夜精品久久久久久久男人的天堂| 黄色成人在线| 国产精品theporn| 欧美**字幕| 久久精品国产亚洲aⅴ| 亚洲免费观看高清完整版在线观看熊 | 久久精品99国产精品日本 | 激情久久久久久| 国产精品v片在线观看不卡| 久久婷婷麻豆| 亚洲欧美日韩高清| 一区二区不卡在线视频 午夜欧美不卡在 | 久久人人97超碰精品888| 日韩一二三区视频| 欧美sm极限捆绑bd| 久久国产一区二区三区| 亚洲女ⅴideoshd黑人| 国产精品99久久久久久久久久久久| 国产欧美欧美| 国产欧美日韩另类一区| 国产精品久久77777| 国产精品va在线| 久久亚洲一区二区三区四区| 国产精品久久久久永久免费观看 | 久久久久久亚洲精品中文字幕| 日韩视频―中文字幕| 男人天堂欧美日韩| 欧美福利小视频| 欧美大秀在线观看| 亚洲国产精品热久久| 老司机凹凸av亚洲导航| 快播亚洲色图| 最近中文字幕mv在线一区二区三区四区| 美女精品一区| 狂野欧美激情性xxxx欧美| 久久亚洲综合色一区二区三区| 亚洲高清精品中出| 亚洲精品字幕| 一本大道av伊人久久综合| 香港成人在线视频| 欧美成ee人免费视频| 欧美www视频在线观看| 亚洲国产精品一区| 欧美一区二区三区四区高清| 在线欧美三区| 亚洲永久精品大片| 久久精品天堂| 91久久亚洲| 亚洲视频一区二区在线观看| 亚洲一区www| 久久国产天堂福利天堂| 欧美成人精品在线视频| 国产精品一区二区三区成人| 一区二区视频欧美| 国产精品久久二区| 在线精品国产成人综合| 一区二区三区欧美在线| 久久精品国产欧美亚洲人人爽| 免费不卡在线视频| 亚洲视频在线看| 久久蜜桃资源一区二区老牛 | 国产三级精品三级| 夜久久久久久| 久久激情视频久久| 亚洲激情综合| 久久精品视频亚洲| 国产精品专区一| 日韩一级精品视频在线观看| 久久久噜噜噜| 久久精品一区| 一区二区电影免费观看| 亚洲人成网站在线播| 欧美视频免费在线| 亚洲精品国产品国语在线app| 欧美一区二区三区四区夜夜大片| 欧美黄色一区二区| 欧美在线观看一区二区三区| 欧美日韩亚洲一区二区| 亚洲成人自拍视频| 欧美一区在线直播| 亚洲免费一在线| 欧美日韩一区在线观看| 欧美日韩伊人| 亚洲人成在线影院| 欧美大胆人体视频| 久久亚洲精品视频| 亚洲高清自拍| 亚洲免费在线电影| 一区二区三区黄色| 欧美视频亚洲视频| 日韩视频在线观看一区二区| 欧美激情一区二区| 欧美超级免费视 在线| 国内成+人亚洲| 久久久青草青青国产亚洲免观| 亚洲自拍电影| 嫩模写真一区二区三区三州| 国产裸体写真av一区二区| 午夜亚洲一区| 久久国产精品99国产精| 国产一区二区中文字幕免费看| 久久久久久久欧美精品| 久久国产一区二区三区| 精品电影在线观看| 亚洲电影有码| 欧美精品国产| 亚洲小说欧美另类婷婷| 蜜臀久久99精品久久久久久9| 久久久久综合网| 亚洲精品一区二区三区在线观看| 亚洲日本一区二区| 欧美性大战xxxxx久久久| 欧美在线影院在线视频| 久久网站热最新地址| 亚洲精品国产精品国自产观看| 亚洲色无码播放| 亚洲午夜久久久久久久久电影网| 国产乱人伦精品一区二区 | 欧美在线观看视频一区二区三区| 亚洲精品一区二区网址| 国产精品视频免费一区| 一级日韩一区在线观看| 宅男精品视频| 国产精品久久毛片a| 亚洲欧美国产精品va在线观看| 亚洲在线第一页| 欧美日本在线播放| 亚洲激情欧美激情| 亚洲一区欧美| 欧美一区二区三区另类 | 欧美a级一区| 亚洲第一在线| 一区二区三区日韩精品| 国产精品二区三区四区| 亚洲深夜福利网站| 久久精品国产视频| 精品成人国产在线观看男人呻吟| 久久久999国产| 欧美福利视频一区| 一区二区三区视频在线看| 国产精品h在线观看| 亚洲女人小视频在线观看| 久久国产精彩视频| 亚洲国产精品悠悠久久琪琪| 两个人的视频www国产精品| 最新日韩精品| 香蕉久久夜色精品国产| 一区二区视频欧美| 欧美日韩精品不卡| 国产欧美日韩三区| 在线看片一区| 午夜精品亚洲一区二区三区嫩草| 久久艳片www.17c.com| 久久综合久久综合久久综合| 国产午夜精品全部视频在线播放| 久久久999精品免费| 亚洲高清在线精品| 午夜久久tv| 亚洲国产高清一区| 国产精品国产馆在线真实露脸| 久久黄色网页| 亚洲精品一区中文| 久久国产精品久久久久久电车| 亚洲国产成人久久综合| 欧美区视频在线观看| 欧美在线www| 亚洲裸体在线观看| 久久久久国产一区二区| 亚洲美女av在线播放| 国精产品99永久一区一区| 亚洲精品视频在线看| 亚洲图片在线观看| 欧美美女bb生活片| 久久成人羞羞网站| 在线一区二区三区做爰视频网站| 另类国产ts人妖高潮视频| 亚洲你懂的在线视频| 亚洲免费av电影| 韩国av一区二区三区| 国产精品私房写真福利视频| 欧美日韩精品久久| 欧美日本国产精品| 女生裸体视频一区二区三区| 亚洲影院在线|