梁志天設(shè)計(jì)公司項(xiàng)目谷歌seo優(yōu)化技巧
1、高級(jí)語(yǔ)言
計(jì)算機(jī)程序是一種讓計(jì)算機(jī)執(zhí)行特定任務(wù)的方法。程序是由程序員用一種稱(chēng)為編程語(yǔ)言的特殊語(yǔ)言編寫(xiě)的。編程語(yǔ)言有很多種,例如 C、C++、Java、Python 等。這些語(yǔ)言被稱(chēng)為高級(jí)語(yǔ)言,因?yàn)樗鼈兏?strong>接近人類(lèi)的自然語(yǔ)言,而不是計(jì)算機(jī)能夠直接理解的二進(jìn)制數(shù)字。
?C/C++ 中的指令:
a = 97;
高級(jí)語(yǔ)言中理想的屬性
首先,高級(jí)語(yǔ)言更容易閱讀和編寫(xiě),因?yàn)槊罡咏覀兠刻焓褂玫淖匀徽Z(yǔ)言。其次,高級(jí)語(yǔ)言需要更少的指令來(lái)執(zhí)行與低級(jí)語(yǔ)言相同的任務(wù),使程序更簡(jiǎn)潔、更容易理解。
a = b * 2 + 5;
在 C++ 中,您可以在一行中執(zhí)行類(lèi)似操作。在匯編語(yǔ)言中,這需要 5 或 6 條不同的指令。程序可以針對(duì)許多不同的系統(tǒng)進(jìn)行編譯(或解釋),并且您不必更改程序以在不同的 CPU 上運(yùn)行(您只需為該 CPU 重新編譯)。
2、機(jī)器語(yǔ)言
計(jì)算機(jī)的 CPU 無(wú)法使用 C/C++。CPU 可以直接理解的有限指令集稱(chēng)為機(jī)器代碼(或機(jī)器語(yǔ)言或指令集)。
這是機(jī)器語(yǔ)言指令示例,是與上面C/C++ 中相同的指令:
10110000 01100001
這些指令指令都由 1 和 0 的序列組成。每個(gè)單獨(dú)的 0 或 1 稱(chēng)為一個(gè)二進(jìn)制數(shù)字,簡(jiǎn)稱(chēng)位。組成單個(gè)命令的位數(shù)各不相同。例如,某些 CPU 處理的指令始終是 32 位長(zhǎng),而其他一些 CPU(例如您可能正在使用的 x86/x64 系列)的指令可以是一個(gè)可變長(zhǎng)度。
小知識(shí)(char *占幾個(gè)字節(jié))
char * 是一個(gè)指針類(lèi)型,它表示一個(gè)指向字符的地址。指針的大小取決于系統(tǒng)的地址空間也就是系統(tǒng)可以訪問(wèn)的內(nèi)存的范圍。
8位系統(tǒng)的地址空間是 2^8 = 256 個(gè)字節(jié),所以指針的大小是 1 個(gè)字節(jié)。
32位系統(tǒng)的地址空間是 2^32 = 4 GB,所以指針的大小是 4 個(gè)字節(jié)。
64位系統(tǒng)的地址空間是 2^64 = 16 EB,所以指針的大小是 8 個(gè)字節(jié)。
不同操作系統(tǒng)的庫(kù)無(wú)法通用的原因(32/64)
每組二進(jìn)制數(shù)字都被 CPU 解釋為執(zhí)行非常具體的工作的命令,例如比較這兩個(gè)數(shù)字,或者將此數(shù)字放入該內(nèi)存位置。但是,由于不同的 CPU 具有不同的指令集,因此為一種 CPU 類(lèi)型編寫(xiě)的指令無(wú)法在不共享相同指令集的 CPU 上使用。這意味著程序通常無(wú)法移植(無(wú)需重大返工即可使用)到不同類(lèi)型的系統(tǒng),并且必須重新編寫(xiě)。
3、匯編語(yǔ)言
由于機(jī)器語(yǔ)言對(duì)于人類(lèi)來(lái)說(shuō)很難閱讀和理解,因此發(fā)明了匯編語(yǔ)言。在匯編語(yǔ)言中,每條指令都由一個(gè)簡(jiǎn)短的縮寫(xiě)(而不是一組位)來(lái)標(biāo)識(shí),并且可以使用名稱(chēng)和其他數(shù)字。
這是與上面相同的匯編語(yǔ)言指令:
mov al, 061h
然而,組裝仍然有一些缺點(diǎn)。首先,匯編語(yǔ)言仍然需要大量指令來(lái)完成甚至簡(jiǎn)單的任務(wù)。雖然各個(gè)指令本身在某種程度上是人類(lèi)可讀的,但理解整個(gè)程序正在做什么可能具有挑戰(zhàn)性(這有點(diǎn)像試圖通過(guò)單獨(dú)查看每個(gè)字母來(lái)理解句子)。其次,匯編語(yǔ)言的可移植性仍然不是很好——為一個(gè) CPU 用匯編語(yǔ)言編寫(xiě)的程序可能無(wú)法在使用不同指令集的硬件上運(yùn)行,并且必須重寫(xiě)或進(jìn)行大量修改。
4、編譯和解釋
計(jì)算機(jī)程序是一種讓計(jì)算機(jī)執(zhí)行特定任務(wù)的方法。程序是由程序員用一種稱(chēng)為編程語(yǔ)言的特殊語(yǔ)言編寫(xiě)的。編程語(yǔ)言有很多種,例如 C、C++、Java、Python 等。這些語(yǔ)言被稱(chēng)為高級(jí)語(yǔ)言,因?yàn)樗鼈兏咏祟?lèi)的自然語(yǔ)言,而不是計(jì)算機(jī)能夠直接理解的二進(jìn)制數(shù)字。
計(jì)算機(jī)的核心部件是 CPU(中央處理器),它負(fù)責(zé)執(zhí)行程序中的指令。CPU 只能理解一種稱(chēng)為機(jī)器語(yǔ)言的低級(jí)語(yǔ)言,它是由 0 和 1 組成的位序列。每種 CPU 類(lèi)型都有自己的機(jī)器語(yǔ)言,也稱(chēng)為指令集。這意味著用一種機(jī)器語(yǔ)言編寫(xiě)的程序不能在另一種機(jī)器語(yǔ)言的 CPU 上運(yùn)行。
為了讓 CPU 能夠執(zhí)行高級(jí)語(yǔ)言編寫(xiě)的程序,需要將高級(jí)語(yǔ)言轉(zhuǎn)換為機(jī)器語(yǔ)言。這可以通過(guò)兩種主要方式實(shí)現(xiàn):編譯和解釋。
編譯
編譯是一種將高級(jí)語(yǔ)言的源代碼(程序員編寫(xiě)的代碼)轉(zhuǎn)換為可執(zhí)行文件(機(jī)器語(yǔ)言的代碼)的過(guò)程。這是通過(guò)使用一種稱(chēng)為編譯器的程序來(lái)完成的。編譯器可以根據(jù)不同的 CPU 類(lèi)型生成不同的可執(zhí)行文件。一旦生成了可執(zhí)行文件,就不需要源代碼或編譯器來(lái)運(yùn)行程序。
這是編譯過(guò)程的簡(jiǎn)化表示:
由于 C++ 程序通常是編譯的,因此我們很快就會(huì)更詳細(xì)地探討編譯器。
解釋
解釋是一種在運(yùn)行時(shí)將高級(jí)語(yǔ)言的源代碼逐行轉(zhuǎn)換為機(jī)器語(yǔ)言的過(guò)程。這是通過(guò)使用一種稱(chēng)為解釋器的程序來(lái)完成的。解釋器可以在不同的 CPU 類(lèi)型上運(yùn)行相同的源代碼。每次運(yùn)行程序時(shí)都需要源代碼和解釋器。解釋器往往比編譯器更靈活,但運(yùn)行程序時(shí)效率較低,因?yàn)槊看芜\(yùn)行程序時(shí)都需要完成解釋過(guò)程。這也意味著每次運(yùn)行程序時(shí)都需要解釋器。
這是解釋過(guò)程的簡(jiǎn)化表示:

編譯和解釋優(yōu)缺點(diǎn)
- 編譯的優(yōu)點(diǎn)是生成的可執(zhí)行文件通常運(yùn)行得更快,而且不需要分發(fā)源代碼。
- 編譯的缺點(diǎn)是需要為每種 CPU 類(lèi)型生成不同的可執(zhí)行文件,而且編譯過(guò)程可能比較耗時(shí)。
- 解釋的優(yōu)點(diǎn)是源代碼可以在不同的 CPU 類(lèi)型上運(yùn)行,而且不需要編譯過(guò)程。
- 解釋的缺點(diǎn)是運(yùn)行程序時(shí)需要解釋器,而且運(yùn)行速度通常比編譯的慢。