9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
學習啦 > 學習電腦 > 電腦硬件知識 > 內存知識 > 編譯時分配內存嗎?

編譯時分配內存嗎?

時間: 本達868 分享

編譯時分配內存嗎?

  編譯時分配內存嗎?編譯時是不分配內存的。下面是學習啦小編為大家收集整理的一些相關知識,希望對大家有幫助!

  編譯時分配內存嗎?

  編譯時與運行時的內存情況

  1.編譯時不分配內存

  編譯時是不分配內存的。此時只是根據聲明時的類型進行占位,到以后程序執行時分配內存才會正確。所以聲明是給編譯器看的,聰明的編譯器能根據聲明幫你識別錯誤。

  2.運行時必分配內存

  運行時程序是必須調到“內存”的。因為CPU(其中有多個寄存器)只與內存打交道的。程序在進入實際內存之前要首先分配物理內存。

  3.編譯過程

  只能簡單說一下,因為如果要詳細的話,就是一本書了《編譯原理》。編譯器能夠識別語法,數據類型等等。然后逐行逐句檢查編譯成二進制數據的obj文件,然后再由鏈接程序將其鏈接成一個EXE文件。此時的程序是以EXE文件的形式存放在磁盤上。

  4.運行過程

  當執行這個EXE文件以后,此程序就被加載到內存中,成為進程。此時一開始程序會初始化一些全局對象,然后找到入口函數(main()或者WinMain()),就開始按程序的執行語句開始執行。此時需要的內存只能在程序的堆上進行動態增加/釋放了。

  編譯時分配內存嗎?另一種解釋

  1、所謂在編譯期間分配空間指的是靜態分配空間(相對于用new動態申請空間),如全局變量或靜態變量(包括一些復雜類型的常量),它們所需要的空間大小可以 明確計算出來,并且不會再改變,因此它們可以直接存放在可執行文件的特定的節里(而且包含初始化的值),程序運行時也是直接將這個節加載到特定的段中,不 必在程序運行期間用額外的代碼來產生這些變量。

  其實在運行期間再看“變量”這個概念就不再具備編譯期間那么多的屬性了(諸如名稱,類型,作用域,生存期等等),對應的只是一塊內存(只有首址和大小), 所以在運行期間動態申請的空間,是需要額外的代碼維護,以確保不同變量不會混用內存。比如寫new表示有一塊內存已經被占用了,其它變量就不能再用它了; 寫delete表示這塊內存自由了,可以被其它變量使用了。(通常我們都是通過變量來使用內存的,就編碼而言變量是給內存塊起了個名字,用以區分彼此)

  內存申請和釋放時機很重要,過早會丟失數據,過遲會耗費內存。特定情況下編譯器可以幫我們完成這項復雜的工作(增加額外的代碼維護內存空間,實現申請和釋 放)。從這個意義上講,局部自動變量也是由編譯器負責分配空間的。進一步講,內存管理用到了我們常常掛在嘴邊的堆和棧這兩種數據結構。

  最后對于“編譯器分配空間”這種不嚴謹的說法,你可以理解成編譯期間它為你規劃好了這些變量的內存使用方案,這個方案寫到可執行文件里面了(該文件中包含若干并非出自你大腦衍生的代碼),直到程序運行時才真正拿出來執行。

  2、編譯其實只是一個掃描過程,進行詞法語法檢查,代碼優化而已,編譯程序越好,程序運行的時候越高效。 我想你說的“編譯時分配內存”是指“編譯時賦初值”,它只是形成一個文本,檢查無錯誤,并沒有分配內存空間。

  當你運行時,系統才把程序導入內存。一個進程(即運行中的程序)在主要包括以下五個分區: 棧、堆、bss、data、code

  代碼(編譯后的二進制代碼)放在code區,代碼中生成的各種變量、常量按不同類型分別存放在其它四個區。系統依照代碼順序執行,然后依照代碼方案改變或調用數據,這就是一個程序的運行過程。

  3、

  編譯時分配內存 --------------- 編譯時是不分配內存的。此時只是根據聲明時的類型進行占位,到以后程序執行時分配內存才會正確。所以聲明是給編譯器看的,聰明的編譯器能根據聲明幫你識別錯誤。

  運行時分配內存 --------------- 這是對的,運行時程序是必須調到“內存”的。因為CPU(其中有多個寄存器)只與內存打交道的。程序在進入實際內存之前要首先分配物理內存。

  編譯過程 -------------- 只能簡單說一下,因為如果要詳細的話,就是一本書了《編譯原理》。編譯器能夠識別語法,數據類型等等。然后逐行逐句檢查編譯成二進制數據的obj文件,然后再由鏈接程序將其鏈接成一個EXE文件。此時的程序是以EXE文件的形式存放在磁盤上。

  運行過程 -------------- 當執行這個EXE文件以后,此程序就被加載到內存中,成為進程。此時一開始程序會初始化一些全局對象,然后找到入口函數(main()或者WinMain()),就開始按程序的執行語句開始執行。此時需要的內存只能在程序的堆上進行動態增加/釋放了。

1340756 主站蜘蛛池模板: 丰满的少妇被猛烈进入白浆| 99国精品午夜福利视频不卡99| 国产精品成人一区二区三区| 久久久精品2019中文字幕之3| 狠狠色噜噜狠狠狠狠av不卡| 99久久99这里只有免费费精品| 亚洲国产成人综合自在线| 亚洲性一交一乱一伦视频| 亚洲精品中文字幕二区| 亚洲精品一二三四区| 色综合天天综合网中文伊| 国内精品久久久久影院日本| 玩弄放荡人妻少妇系列| 中文字幕亚洲综合久久| 97亚洲熟妇自偷自拍另类图片| 亚洲aⅴ男人的天堂在线观看| 最近中文字幕完整版2019| 精品国产成人国产在线视| 老熟妇国产一区二区三区| 真实国产老熟女无套内射| 国精偷拍一区二区三区| 亚洲鸥美日韩精品久久| 亚洲无人区一码二码三码| 国产精品亚洲综合网一区| 中文字幕国产精品综合| 国内精品久久人妻无码不卡| 精品午夜久久福利大片| 国产精品一区在线蜜臀| 男同精品视频免费观看网站| 西西人体www大胆高清| 一区二区视频观看在线| 欧美一区二区三区欧美日韩亚洲| 在线国产你懂的| 欧美白妞大战非洲大炮| 日韩中文字幕亚洲精品一| 色窝窝免费播放视频在线| 国产精品视频一区二区亚瑟| 精品不卡一区二区三区| 国产二区三区不卡免费| 国产精品高清一区二区三区| 九九热免费在线视频观看|