close

  C語言的變數有三種記憶體管理模式:

  1. Automatic 記憶體管理模式: 變數的生命期間是從第一次宣告開始被自動配置記憶體,當生命期間結束,記憶體即被移除。一般變數宣告皆屬Automatic變數。
  2. Static 記憶體管理模式: 變數資料在main程式執行之前便已經被初始化,未被指定初始化的Static變數會被自動指定為0或NULL,一般變數加上Static宣告即屬於此種記憶體管理模式。

EX: static int x;

  1. 自行管理記憶體模式: 透過malloc()函式配置並需要用free()釋放的變數,是唯一能讓C語言自由改變宣告陣列大小的模式。

 

  C語言變數可以是與檔案外的變數連結,也可以僅與檔案內部連結,我們稱這是C語言變數的外部連結與內部連結。一般可以透過extern(外部連結)static(內部連結)讓C語言變數(或函式)決定其在檔案間的可見範圍。

 

  在此同樣分三部份討論:

 

  1. 生存空間是檔案的變數(全域變數): 預設是外部連結,加上static之後可將變數限制在檔案內成內部連結變數。 檔案變數的記憶體管理方式則都是static 管理模式
  1. 生存空間在區塊內的變數(區域變數): 預設是內部連結,可以透過extern轉變為外部連結變數,但不建議這麼做。 區域變數記憶體模式是automatic模式,但加上static會轉變為static模式。
  1. 檔案函式: 函式在連結方式與記憶體模式上都與全域變數屬於同類,預設都是外部連結方式,也就是其他檔案都可視,同樣必須透過static才能轉為內部連結。記憶體管理模式同樣是static類。

 

2018年7月15日星期日

arrow
arrow
    創作者介紹
    創作者 jackterrylau 的頭像
    jackterrylau

    儒道哲學的浪漫人生

    jackterrylau 發表在 痞客邦 留言(0) 人氣()