在系統為一個程序分配的空間中,分成許多段,比如有代碼段,存放程序可執行代碼,有數據段,可以分配變量,有常量段,專門存放常量,是只讀的。常量變量可以位于數據段中,仍然是變量,只是程序沒有改動權限。在程序執行到main之前,系統負責將常量區存儲的常量賦值給常量。
變量可以存儲在內存中的不同地方,這依賴于它們的生存期。在函數外部定義的變量(全局變量或靜態外部變量)和在函數內部定義的static變量,其生存期就是程序運行的全過程,這些變量被存儲在數據段(datasegment)中。數據段是在內存中為這些變量留出的一段大小固定的空間,它分為兩部分,一部分用來存放初始化變量,另一部分用來存放未初始化變量。
在函數內部定義的auto變量(沒有用關鍵字static定義的變量)的生存期從程序開始執行其所在的程序塊代碼時開始,到程序離開該程序塊時為止。作為函數參數的變量只在調用該函數期間存在。這些變量被存儲在棧(stack)中。棧是內存中的一段空間,開始很小,以后逐漸自動增大,直到達到某個預定義的界限。在象dos這樣的沒有虛擬內存(virtualmemory)的系統中,這個界限由系統決定,并且通常非常大,因此程序員不必擔心用盡棧空間。