日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

c语言和其他高级语言一样也要经过编译,C语言和其他高级语言的最大的区别是什么?...

發布時間:2025/3/15 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言和其他高级语言一样也要经过编译,C语言和其他高级语言的最大的区别是什么?... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

提到C語言,我們知道C語言和其他高級語言的最大的區別就是C語言是要操作內存的!

我們需要知道——變量,其實是內存地址的一個抽像名字罷了。在靜態編譯的程序中,所有的變量名都會在編譯時被轉成內存地址。機器是不知道我們取的名字的,只知道地址。

內存的使用是程序設計中需要考慮的重要因素之一,這不僅由于系統內存是有限的(尤其在嵌入式系統中),而且內存分配也會直接影響到程序的效率。因此,我們要對C語言中的內存管理,有個系統的了解。

在C語言中,定義了4個內存區間:代碼區;全局變量和靜態變量區;局部變量區即棧區;動態存儲區,即堆區;具體如下:

1、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構中的棧。

2、堆區(heap) — 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。注意它與數據結構中的堆是兩回事,分配方式倒是類似于鏈表,呵呵。

3、全局區(靜態區)(static)—全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的 另一塊區域。 - 程序結束后由系統釋放。

4、常量區 —常量字符串就是放在這里的。 程序結束后由系統釋放

5、程序代碼區—存放函數體的二進制代碼。

我們來看張圖:

首先我們要知道,源代碼編譯成程序,程序是放在硬盤上的,而非內存里!只有執行時才會被調用到內存中!

我們來看看程序結構,ELF是是Linux的主要可執行文件格式。ELF文件由4部分組成,分別是ELF頭(ELF header)、程序頭表(Program header table)、節(Section)和節頭表(Section header table)。具體如下:

1、Program header描述的是一個段在文件中的位置、大小以及它被放進內存后所在的位置和大小。即要加載的信息;

2、Sections保存著object 文件的信息,從連接角度看:包括指令,數據,符號表,重定位信息等等。在圖中,我們可以看到Sections中包括:

(1)? .text?? 文本結 存放指令;

(2)? .rodata?? 數據結? readonly;

(3)??.data? 數據結?可讀可寫;

3、Section頭表(section header table)包含了描述文件sections的信息。每個section在這個表中有一個入口;每個入口給出了該section的名字,大小,等等信息。相當于 索引!

而程序被加載到內存里面,又是如何分布的呢?我們看看上圖中:

1、正文和初始化的數據和未初始化的數據就是我們所說的數據段,正文即代碼段;

2、正文段上面是常量區,常量區上面是全局變量和靜態變量區,二者占據的就是初始化的數據和未初始化的數據那部分;

3、再上面就是堆,動態存儲區,這里是上增長;

4、堆上面是棧,存放的是局部變量,就是局部變量所在代碼塊執行完畢后,這塊內存會被釋放,這里棧區是下增長;

5、命令行參數就是$0 $1之類的,環境變量什么的前面的文章已經講過,有興趣的可以去看看。

我們知道,內存分為動態內存和靜態內存,我們先講靜態內存。

總結

以上是生活随笔為你收集整理的c语言和其他高级语言一样也要经过编译,C语言和其他高级语言的最大的区别是什么?...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。