當前位置:首頁 » 編程軟體 » 編譯分組方案

編譯分組方案

發布時間: 2022-05-31 09:24:27

1. 編譯時分配內存和運行時分配內存

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

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

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

2. 程序寫好後怎麼編譯

把配置管理器選擇為Release,然後選擇菜單--生成--生成xxx(或者直接點擊綠色小箭頭運行下)就已經生成exe程序了,在bin/release文件夾下。讓你選擇release是把程序編譯成發布版,vs會自動優化代碼。如果是debug則不會。

3. 我們經常看到書上面說的 某某變數的內存單元是編譯器在編譯時候分配的 是什麼意思

所謂在編譯期間分配空間指的是靜態分配空間(相對於用new動態申請空間),如全局變數或靜態變數(包括一些復雜類型的常量),它們所需要的空間大小可以

明確計算出來,並且不會再改變,因此它們可以直接存放在可執行文件的特定的節里(而且包含初始化的值),程序運行時也是直接將這個節載入到特定的段中,不
必在程序運行期間用額外的代碼來產生這些變數。
其實在運行期間再看「變數」這個概念就不再具備編譯期間那麼多的屬性了(諸如名稱,類型,作用
域,生存期等等),對應的只是一塊內存(只有首址和大小),
所以在運行期間動態申請的空間,是需要額外的代碼維護,以確保不同變數不會混用內存。比如寫new表示有一塊內存已經被佔用了,其它變數就不能再用它了;
寫delete表示這塊內存自由了,可以被其它變數使用了。(通常我們都是通過變數來使用內存的,就編碼而言變數是給內存塊起了個名字,用以區分彼此)
內存申請和釋放時機很重要,過早會丟失數據,過遲會耗費內存。特定情況下編譯器可以幫我們完成這項復雜的工作(增加額外的代碼維護內存空間,實
現申請和釋 放)。從這個意義上講,局部自動變數也是由編譯器負責分配空間的。進一步講,內存管理用到了我們常常掛在嘴邊的堆和棧這兩種數據結構。
最後對於「編譯器分配空間」這種不嚴謹的說法,你可以理解成編譯期間它為你規劃好了這些變數的內存使用方案,這個方案寫到可執行文件裡面了(該文件中包含若干並非出自你大腦衍生的代碼),直到程序運行時才真正拿出來執行。

4. 求數字分組演算法,請使用C或C++語言

我的想法比較簡單。你可以將這個演算法寫成遞歸形式,第一層做組合挑選,共2^n種,第二層2
^n-1種.......。這樣可以挑選所有的組合情況,最後再比較,挑選。程序比較容易實現,但是我擔心效率。
如果需要進行智能處理,最好的方式是在遞歸過程中添加判斷和預測,這樣會提高效率,盡快搜索到好的結論。

熱點內容
如何找緩存 發布:2024-04-28 01:24:04 瀏覽:947
蘋果手機資料怎麼傳送到安卓手機 發布:2024-04-28 01:18:35 瀏覽:468
資料庫泄漏 發布:2024-04-28 01:18:26 瀏覽:42
安卓去哪裡下載鈴聲好 發布:2024-04-28 01:18:21 瀏覽:403
錄制伺服器怎麼樣 發布:2024-04-28 01:13:16 瀏覽:463
提示mysql存儲過程不存在 發布:2024-04-28 00:52:35 瀏覽:312
絕地求生如何增加人機配置 發布:2024-04-28 00:42:55 瀏覽:315
思科怎麼配置主機數量 發布:2024-04-28 00:41:58 瀏覽:823
java進制運算 發布:2024-04-28 00:33:58 瀏覽:284
編譯原理什麼內容 發布:2024-04-28 00:01:33 瀏覽:478