虛擬文件系統觀後感

。。。我靠,我記得小時候看完個電影什麼的老師就讓寫觀後感,我通常是玩一天,然後第二天到學校隨便抄個同學的。

虛擬文件系統(VFS),是我參加工作後做的第一個東西,當時剛從大學出來,而且C++是自學的,很分散,由此可知該系統被我做的是多麼失敗。
之後在遊戲的開發過程中,該系統是用不上的了,估計老大是實在看不下去了,就自己重新寫了個。但我也一直沒有時間看,這兩天反正離職在家,就看了下這個,學到不少。

首先是看代碼,不會看,就用比較笨的方法,就像是在大學剛學C的時候——抄代碼。區別是之前是紙和筆,現在是直接敲代碼了。大體知道下先從哪個文件開始抄,就一個接一個文件往下順吧。

一個是發現有好多好用的系統函數或結構。
1. sscanf.這個函數其實在很早很早以前就知道的,早在還在看C++基礎教程什麼的時候。但之後就沒怎麼用過,一直用sprintf什麼的,看到這個函數的應用真是讓我慚愧到羞愧到尬尷。因爲之前有什麼字符串轉數字格式總是頭疼,有了這個就好說了

char szFloat[MAX_PATH] = "";
sprintf_s(szFloat,"%d.%d",99,88);
float fResult = 0.0f;
sscanf((const char*)szFloat,"%f",&fResult);

這樣組合一個小數多容易啊哈哈哈,唉…

2. struct _stat. 獲取文件的狀態信息

struct _stat    s;
if (!_stat(FileName, &s))
    info.uTime = (unsigned int)s.st_mtime;

3. memchr:Finds characters in a buffer.
悲劇啊,這麼好用的函數居然不知道啊,之前都是悲催的自己寫..

4.還有一些多線程的函數,對多線程沒怎麼用過甚至就沒怎麼學過,所以看到這些函數還是懵一下的.
話說VFS的數據同步安全還是很重要的說,當時我自己寫VFS時那互斥什麼的用的。。現在想起來真是慚愧到羞愧到尬尷。

5.PathCanonicalize;規範化路徑字符串。 好,又多記錄一條對路徑操作的函數了。

好吧,以上算是系統本來就有的一些零散的東西。下面還有些有用的東西:

1. SmartPtr:翻譯成中文應該是智能指針。。
都知道在一個函數中new數據了,在離開函數之前就要del的,好吧,如果這是個SmarPtr,哈哈,不用手動del了,等執行到其析構函數就自動幫你del了。
2.引用計數。這個應該熟悉點,就是對象被別的地方引用了就增加一次計數,用完了再減一次計數,等到計數爲0就delete this.計數中也有多線程數據同步的問題,所以用InterlockedIncrement這個函數。
3. 算出一個字符串的HASH,可以搞些唯一ID什麼的

for (int i = 0; pString[i]; i++)
  {
    c = pString[i];
    if (c >= 'A' && c <= 'Z')
      c += 0x20;  //中文字符不用轉換大小寫
    else if (c == '/')
      c = '//';
    Id = (Id + (i + 1) * c) % 0x8000000b * 0xffffffef;
  }

return (Id ^ 0x12345678)

4.又得到一些好用的關於文件或文件路徑等操作的函數。
5.資源釋放3種類型,free,delete,Release()
6.內存池。之前寫尋路時自己寫過一個內存池,其實是直接複製的網上的一個模板。這裏有個內存池模板,還有多線程的數據保護措施。。。
7.知道了幾種壓縮數據的方法或庫或算法吧:lzma,ucl;之前我用的是zlib;我看還有一種默認的壓縮方法,我靠,這是什麼方法啊:

for (size_t i = 0; i < nSrcLen; i++)
    {
        pDestBuffer[i] = i ^ pSrcBuffer[i];
    }

同樣,解壓:

for (size_t i = 0; i < nSrcLen; i++)
    {
        pDestBuffer[i] = i ^ pSrcBuffer[i];
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章