動(dòng)態(tài)變量和靜態(tài)變量的區(qū)別:
蘆淞網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),蘆淞網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為蘆淞上1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的蘆淞做網(wǎng)站的公司定做!
1、存儲(chǔ)位置
動(dòng)態(tài)變量:存儲(chǔ)在內(nèi)存出棧數(shù)據(jù)區(qū)
靜態(tài)變量:存儲(chǔ)在全局?jǐn)?shù)據(jù)區(qū)(靜態(tài)數(shù)據(jù)區(qū))
2、生命期
動(dòng)態(tài)變量:根據(jù)你定義的位置確定,比如你在一個(gè)函數(shù)中定義的,那么超出該函數(shù)范圍變量將失效
靜態(tài)變量:程序結(jié)束時(shí)才釋放
3、作用域
動(dòng)態(tài)變量:同樣的要根據(jù)你定義的位置才能確定,和第二點(diǎn)的一樣
靜態(tài)變量:當(dāng)前文件中有效
堆和棧的區(qū)分:
堆(Heap)棧(Stack)
1、內(nèi)存分配方面:
堆:一般由程序員分配釋放, 若程序員不釋放,程序結(jié)束時(shí)可能由OS回收 。注意它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式是類似于鏈表。可能用到的關(guān)鍵字如下:new、malloc、delete、free等等。
棧:由編譯器(Compiler)自動(dòng)分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。
2、申請(qǐng)方式方面:
堆:需要程序員自己申請(qǐng),并指明大小。在c中malloc函數(shù)如p1 = (char *)malloc(10);在C++中用new運(yùn)算符,但是注意p1、p2本身是在棧中的。因?yàn)樗麄冞€是可以認(rèn)為是局部變量。
棧:由系統(tǒng)自動(dòng)分配。 例如,聲明在函數(shù)中一個(gè)局部變量 int b;系統(tǒng)自動(dòng)在棧中為b開辟空間。
3、系統(tǒng)響應(yīng)方面:
堆:操作系統(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)的空間分配給程序,另外,對(duì)于大多數(shù)系統(tǒng),會(huì)在這塊內(nèi)存空間中的首地址處記錄本次分配的大小,這樣代碼中的delete語句才能正確的釋放本內(nèi)存空間。另外由于找到的堆結(jié)點(diǎn)的大小不一定正好等于申請(qǐng)的大小,系統(tǒng)會(huì)自動(dòng)的將多余的那部分重新放入空閑鏈表中。
棧:只要棧的剩余空間大于所申請(qǐng)空間,系統(tǒng)將為程序提供內(nèi)存,否則將報(bào)異常提示棧溢出。
4、大小限制方面:
堆:是向高地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu),是不連續(xù)的內(nèi)存區(qū)域。這是由于系統(tǒng)是用鏈表來存儲(chǔ)的空閑內(nèi)存地址的,自然是不連續(xù)的,而鏈表的遍歷方向是由低地址向高地址。堆的大小受限于計(jì)算機(jī)系統(tǒng)中有效的虛擬內(nèi)存。由此可見,堆獲得的空間比較靈活,也比較大。
棧:在Windows下, 棧是向低地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu),是一塊連續(xù)的內(nèi)存的區(qū)域。這句話的意思是棧頂?shù)牡刂泛蜅5淖畲笕萘渴窍到y(tǒng)預(yù)先規(guī)定好的,在WINDOWS下,棧的大小是固定的(是一個(gè)編譯時(shí)就確定的常數(shù)),如果申請(qǐng)的空間超過棧的剩余空間時(shí),將提示overflow。因此,能從棧獲得的空間較小。
5、效率方面:
堆:是由new分配的內(nèi)存,一般速度比較慢,而且容易產(chǎn)生內(nèi)存碎片,不過用起來最方便,另外,在WINDOWS下,最好的方式是用VirtualAlloc分配內(nèi)存,他不是在堆,也不是在棧是直接在進(jìn)程的地址空間中保留一快內(nèi)存,雖然用起來最不方便。但是速度快,也最靈活。
棧:由系統(tǒng)自動(dòng)分配,速度較快。但程序員是無法控制的。
6、存放內(nèi)容方面:
堆:一般是在堆的頭部用一個(gè)字節(jié)存放堆的大小。堆中的具體內(nèi)容有程序員安排。
棧:在函數(shù)調(diào)用時(shí)第一個(gè)進(jìn)棧的是主函數(shù)中后的下一條指令(函數(shù)調(diào)用語句的下一條可執(zhí)行語句)的地址然后是函數(shù)的各個(gè)參數(shù),在大多數(shù)的C編譯器中,參數(shù)是由右往左入棧,然后是函數(shù)中的局部變量。 注意: 靜態(tài)變量是不入棧的。當(dāng)本次函數(shù)調(diào)用結(jié)束后,局部變量先出棧,然后是參數(shù),最后棧頂指針指向最開始存的地址,也就是主函數(shù)中的下一條指令,程序由該點(diǎn)繼續(xù)運(yùn)行。
7、存取效率方面:
堆:char *s1 = "Hellow Word";是在編譯時(shí)就確定的;
棧:char s1[] = "Hellow Word"; 是在運(yùn)行時(shí)賦值的;用數(shù)組比用指針?biāo)俣纫煲恍?,因?yàn)橹羔樤诘讓訁R編中需要用edx寄存器中轉(zhuǎn)一下,而數(shù)組在棧上直接讀取。
一、靜態(tài)化的優(yōu)點(diǎn):
1有利于搜索引擎收錄網(wǎng)站頁面的信息:搜索引擎更喜歡靜態(tài)的,更變于抓取,搜索引擎SEO排名會(huì)更容易提高。
2靜態(tài)網(wǎng)頁化網(wǎng)頁穩(wěn)定
3可以提高網(wǎng)頁加載速度
4減輕服務(wù)器負(fù)擔(dān),瀏覽器不需要頻發(fā)調(diào)用數(shù)據(jù)庫。
5數(shù)據(jù)庫出錯(cuò)不會(huì)影響正常訪問
二、偽靜態(tài)
PHP偽靜態(tài):是利用Apache mod_rewite實(shí)現(xiàn)url重寫的方法
改寫訪問地址,能夠通過URL的PATHINFO模式來改動(dòng)它。讓它看上去更像一個(gè)靜態(tài)頁面。從而有更大的幾率被搜索引擎抓取和收錄,僅是對(duì)搜索引擎比較友好,偽靜態(tài)化
三、純靜態(tài)化
純靜態(tài)化,就是生成HTML文件的方式,我們須要開啟PHP自帶的緩存機(jī)制,即ob_start來開啟緩存。而且在ob_start之前不能有不論什么輸出,否則運(yùn)行失敗,然后我們用ob_get_contents函數(shù)來獲取緩存中的內(nèi)容,該函數(shù)會(huì)返回一個(gè)字符串。第三個(gè)函數(shù)就是ob_end_clean,它用來清空緩存中的內(nèi)容而且關(guān)閉,成功返回True,失敗返回False。
?php
if(file_exists("match.html") (time()-filemtime("match.html"))300)
{
//如果存在對(duì)應(yīng)的靜態(tài)文件,則直接訪問
require_once("match.html");
}else{
//這里用數(shù)組來仿真數(shù)據(jù)庫操作,現(xiàn)實(shí)一般都是操作數(shù)據(jù)庫得到對(duì)應(yīng)數(shù)據(jù)
$student = array("huangxing","chenyuwei",'xufei','zhangjingwen','xuepei');
ob_start();
//載入模板
require_once("muban.php");
file_put_contents("match.html",ob_get_clean());
require_once('match.html');
}
PHP 是一種用來制作動(dòng)態(tài)網(wǎng)頁的服務(wù)器端腳本語言。你通過PHP和HTML創(chuàng)建頁面。當(dāng)訪問者打開網(wǎng)頁時(shí),服務(wù)器端便會(huì)處理 PHP 指令,然后把其處理結(jié)果送到訪問者的瀏覽器上面,就好像 ASP 或者是 ColdFusion 一樣。然而,PHP 跟 ASP 或 ColdFusion 不一樣的地方在于,它是跨平臺(tái)的開放源代碼。PHP 可以在 Windows NT 以及很多不同的 Unix 版本中執(zhí)行,它也可以被編譯為一個(gè) Apache 模塊,或者是一個(gè)CGI二進(jìn)制文件。當(dāng)被編譯為 Apache ??鞎r(shí),PHP 尤其輕巧方便。它沒有任何繁瑣程序所產(chǎn)生的負(fù)擔(dān),因此可以很快的返回結(jié)果,同時(shí)也不需為了保持較小的服務(wù)器內(nèi)存映象,而去調(diào)整mod_perl。
除了能夠用來產(chǎn)生你的網(wǎng)頁的內(nèi)容之外,PHP 也可以用來傳送 HTTP頭。你可以設(shè)定 cookies,授權(quán)管理,并將使用者重定向至新的頁面。它也能好的訪問很多數(shù)據(jù)庫及ODBC。另外還可與各式各樣的外部庫集成,由此可以讓你做幾乎任何事情,從創(chuàng)建 PDF 文件到解析XML。
PHP 代碼就嵌在Web頁面中,因此你不必為它建立一個(gè)特別的開發(fā)環(huán)境或IDE。你用?php and end it with ?標(biāo)志PHP代碼(也可以將PHP設(shè)定成使用ASP形式的% %標(biāo)志甚至是用SCRIPT LANGUAGE="php"/SCRIPT)。PHP引擎會(huì)處理這些標(biāo)志之間的任何東西。
PHP語言的語法跟C以及Perl很像。在使用前,你無須聲明變量。要?jiǎng)?chuàng)建陣列以及散列(關(guān)聯(lián)性陣列)也很快。PHP的初步面向?qū)ο筇匦赃€提供了組織及封裝代碼的簡便方法。
盡管當(dāng)嵌入 Apache 里面時(shí),PHP運(yùn)行最快,但在PHP相關(guān)站點(diǎn)上還是有關(guān)于如何使其與Microsoft IIS 以及 Netscape Enterprise Server無縫集成的操作指南。如果你還沒有PHP,可以在其官方網(wǎng)站下載取得。在那里也可以找到一份包括PHP所有函數(shù)和特性的用戶手冊(cè)。
創(chuàng)建自己的命令
因?yàn)镻HP腳本是寫在 HTML 文檔中的,你不必用特殊的編輯器來創(chuàng)建頁面。不過你必須在支持PHP的服務(wù)器上面執(zhí)行 PHP。如果你用的是你自己的服務(wù)器,則很容易辦到。如果是通過ISP 服務(wù)處理頁面,則需要聯(lián)系你的 ISP 的客服小組請(qǐng)他們幫你安裝PHP。
對(duì)于Unix系統(tǒng),你必須具備基本的Unix技巧,例如會(huì)使用make以及一個(gè)C語言編譯器。在你的系統(tǒng)上,還要有一個(gè) ANSI C編譯器,以及一個(gè)Web服務(wù)器。
對(duì)于Windows 95/NT ,你需要以下服務(wù)器之一:Microsoft Personal Web Server,Microsoft Internet Information Server 3 或4,Apache 1.3.x,或者Omni HTTPd 2.0b1