普考-資訊處理計算機概要111 年第 5 題單選題
當程式被編譯完成後,程式內容根據不同的特性,如:全域變數與程式之指令,會被載入對應的記憶體區塊。下列那些區塊的容量大小,是程式在編譯時期即可決定?
A文字部分(text segment)、靜態數據(static data)正確答案
B靜態數據(static data)、動態數據(dynamic data)
C動態數據(dynamic data)、堆疊部分(stack segment)
D文字部分(text segment)、堆疊部分(stack segment)
A正確答案
編譯時期就能決定大小的是 text(程式碼)與 static data(全域/靜態變數),heap 與 stack 為執行時動態配置。
為什麼答案是 A
text segment 存放編譯後的機器指令,程式碼長度編譯時即確定;static data 存放全域變數與靜態變數,數量與大小也在編譯時決定,兩者皆為固定大小。
載入中…
完整詳解
Pro · 無限重點 編譯時期就能決定大小的是 text(程式碼)與 static data(全域/靜態變數),heap 與 stack 為執行時動態配置。
口訣:靜態的編譯期決定,動態的執行期才知道。text + static = 編譯期固定。
逐選項分析
A✓ 正確
text segment 存放編譯後的機器指令,程式碼長度編譯時即確定;static data 存放全域變數與靜態變數,數量與大小也在編譯時決定,兩者皆為固定大小。
B✕ 陷阱
static data 雖是編譯期決定,但 dynamic data(heap)由 malloc/new 於執行時配置,大小無法預知,故此組合錯誤。
C✕
dynamic data 與 stack 皆為執行時才決定大小:heap 依配置需求動態成長,stack 依函式呼叫深度與區域變數動態變化,都不是編譯期可決定。
D✕ 陷阱
text 雖為編譯期固定,但 stack 會隨函式呼叫、遞迴深度動態增減,大小由執行時決定,故不符題意。
程式記憶體四大區塊
| 區塊 | 內容 | 大小決定時期 | 成長方向 |
|---|
| Text | 機器指令(程式碼) | 編譯時期 ✅ | 固定 |
| Static/Data | 全域、靜態變數 | 編譯時期 ✅ | 固定 |
| Heap | malloc/new 動態配置 | 執行時期 | 向上成長 |
| Stack | 區域變數、函式呼叫 | 執行時期 | 向下成長 |
常見陷阱是誤以為 stack 大小在編譯時可由編譯器預估而固定。實際上 stack 雖有 OS 設定上限,但實際使用量由執行時函式呼叫深度決定,屬動態區塊。只有 text 與 static data 真正在編譯期就能確定大小。