從PHP寫C語言是什么感受

寫C的原因

最近用PHP寫視頻加密,發(fā)現PHP加密很慢而且1M的文件需要100M的內存,所以經常爆掉系統(tǒng)內存,真心悲劇。為什么會這樣的悲???按照算法的需求,要把文件內容用zlib庫進行壓縮一下,就能讓內存暴增了。PHP里面的字符運算還要調用pack函數,將字符串轉化成整形數組,然后這里又耗掉了大部分的內存。但是加密后,我還要寫入新文件呀,又要unpack回去,最重要的問題是PHP不能動態(tài)釋放內存?!不能動態(tài)釋放內存?!不能動態(tài)釋放內存?。?!(“可惡”的事情必須鄭重的強調),這樣子讓視頻文件需要比自己大100倍的內存。想想一個視頻動不動就500M,讓我哪里去找個這麼大內存的服務器。明顯,這樣太不合理了,為了優(yōu)化加密速度,想想大學當年也是瞎寫了4年的C,C也更接近底層,明顯可以free掉內存,而且PHP也是用C來實現,正好有個機會重溫一下C,以后就可以寫PHP擴展了。

PHP與C的一些區(qū)別

1、C語言我每寫一個變量的時候必須定義好變量的類型,PHP里面是隨意切換變量類型的。C每用一個變量前必須先定義好,PHP里面可以在任何地方$一個變量出來,隨心所欲太習慣了。正因為強類型的問題,在PHP里面判斷兩個字符串是不是相等,直接用$a=="PHP"就可以。而C里面就要用到strcmp函數來進行對比。

2、C聲明數組必須是定長的,因為C是根據數組長度分配內存空間的;但是對于PHP來說,為什么要先定義好數組長度呀,完全沒有這個需求呀,我們向來習慣數組動態(tài)賦值后用count一下計算長度就可以了。

3、C語言的二維數組,多維數組也是要預先定義好的,但是PHP里面數組完全的各種嵌套呀,為什么要管數據的幾維數組的格式?多維數組滿足不了你的需求對吧,C里面還有結構體呀,但是還是要預先定義好你數組的結構體,PHP哪需要你管那么多,一個數組就可以完成滿足你各種數組結構了,數組用的溜,就可以解決很多程序上的問題了。

4、C用到什么才加載什么庫。當我寫入一個簡單的常見的函數floor的時候,居然會編譯不成功,提示沒有該函數的定義。給我的第一感覺就是不可能吧,C連這種基本的函數都沒有!Google之后,我才知道我是沒有include相應的頭部文件,而PHP對于這些基礎的函數都是默認加載進去的。

5、PHP的有很多很方便而意義明確的函數。我要判斷文件和文件夾是否存在,PHP里面一般是用file_exists就可以。C用access函數,函數中還有幾個選項,分別代表不同的意義,作為需要才用到的原則,我自動把暫時沒有用到的選擇參數給忽略了。

6、C語言函數是不可以直接返回數組的。我找了半天才知道,C語言里面把數組作為參數傳給函數里面,直接就是傳地址的,即是數組的元素會因為函數的里面的運算而改變。那么問題又來了,我要怎么樣才可以返回一個變長的數組呢?神奇指針終于起到作用了,就是定義一個返回指針類型的函數,把一個指針指向一個數組的首地址就可以了。這讓可是我糾結了大半天才找到的結果呀!PHP里面完全沒有必要這么繞,函數可以直接返回任何類型。

7、C語言編譯還要帶各種參數的。因為我用到了zlib的庫的壓縮函數,在編譯的時候因為缺少了-lz參數而不通過。PHP最多也就是用到一些擴展里面的函數的時候,提示沒有定義,把擴展加載進去就好了。一般的操作就是刷新一下網頁就OK了。

一點點感受

在折騰了一周多C語言后,終于把PHP的加密程序成功的轉化成了C語言。明明用PHP只是半天就寫出來的程序的呀?。?/p>

其實當年學PHP的時候,就覺得PHP居然這么靈活,完全沒有C那么多約束呀!這些只是一些語言的特性,但是作為一個完全沒有學過C的PHPer來說,肯定會不習慣這些基本的區(qū)別。而PHP肯定比C語言具有更加低的學習成本,門檻也低。所以PHP可以更加容易吸引初入門的開發(fā)者。

C語言為什么快?因為它有各種制約,是非常嚴謹的語言,需要我們開發(fā)者付出更多的勞動。其實PHP就像我們自己編寫C程序時,在長期編碼中形成的一個公共庫。所以,我們必須明白PHP的靈活和方便,是以C背后做了更多工作為代價的。越是靈活,越是自由,我們在背后就越需要付出更多的汗水!

站在從社會發(fā)展角度來看,PHP比C語言高級一些。因為PHP讓人更加“懶”,因為PHP更容易也更加快產出一個產品。就像一個好UI設計,能讓傻瓜不用別人教就可以自己弄懂。但是只有深入了解底層的原理,我們才可以設計出更加好的程序。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容