2017-09-16 205 views
0

從編程語言語用,由ScottC++靜態對象中的類的靜態數據成員和靜態方法?

對象的壽命通常對應於三個主要 存儲分配機制之一,用於管理對象的空間:

  1. 靜態對象給出的絕對地址這在整個程序的執行過程中保留下來。

  2. 堆棧對象以後進先出順序分配和釋放,通常與子例程調用和返回一起使用。

  3. 堆對象可以在任意時間分配和釋放。他們需要更通用(並且昂貴)的存儲管理算法 算法。

是在PLP書靜態數據成員和 C++靜態對象類的靜態方法?

在編譯時或運行時分配靜態數據成員和類的靜態方法的存儲空間嗎?

他們在哪裏分配?

謝謝。

回答

1

PLP書籍中的C++靜態對象中的類的靜態數據成員和靜態方法是什麼?

靜態數據成員,是的。和函數內部的靜態對象,也是。還有在文件範圍聲明的對象。

是在編譯時或運行時分配的靜態數據成員和類的靜態方法的存儲?

如果分配,你的意思是內存分配,其內存佔用是在編譯時保留,空間被鏈接時(或在加載時動態加載)鏈接器的進程空間實際分配。無論如何,在運行時間之前。

但是,在調用main()函數之前,在文件或類範圍聲明的靜態對象在運行時初始化爲

在函數中定義的靜態對象是不同的。它們在第一次代碼流過它們時被初始化。

他們在哪裏分配?

無論鏈接器還是加載器決定。這可以通過編寫你自己的鏈接腳本來影響(超出了恐怕這個答案的範圍)。

+0

謝謝。 1. PLP中靜態對象的靜態方法是什麼?運行時間之前分配了其存儲空間嗎? 2.在調用main()函數之前,在運行時初始化在文件或類範圍聲明的靜態對象。「在C語言中,靜態對象必須用」常量表達式「來初始化,如果我是正確的,那意味着靜態對象在C編譯時被初始化。C++與C不同之處在於靜態對象是在運行時而不是編譯時初始化的嗎? 3.「他們在哪裏分配?」這是正確的,他們沒有分配堆棧或堆,但在靜態區域? – Tim