[英]Are the static data members and static methods of a class in C++ static objects?
摘自Scott的《編程語言語用學》
對象生存期通常對應於用於管理對象空間的三種主要存儲分配機制之一:
給靜態對象一個絕對地址,該地址在程序的整個執行過程中都將保留。
堆棧對象通常按子例程調用和返回的順序,以后進先出的方式分配和釋放。
- 堆對象可以在任意時間分配和釋放。 他們需要更通用(且更昂貴)的存儲管理算法。
PLP書中的C ++靜態對象中的類的靜態數據成員和靜態方法嗎?
是否在編譯時或運行時分配了靜態數據成員和靜態方法的存儲?
他們在哪里分配?
謝謝。
PLP書中的C ++靜態對象中的類的靜態數據成員和靜態方法嗎?
靜態數據成員,是的。 還有函數內部的靜態對象,也是。 也是在文件作用域聲明的對象。
是否在編譯時或運行時分配了靜態數據成員和靜態方法的存儲?
如果按分配表示內存分配,則它們的內存占用空間是在編譯時保留的,而鏈接器實際上是在鏈接時(或在加載時是動態加載器)在進程空間中分配了空間。 無論哪種情況,都在運行時間之前。
但是,在文件或類作用域中聲明的靜態對象是在運行時(在調用main()函數之前) 初始化的 。
函數中定義的靜態對象是不同的。 它們在代碼第一次流過它們時被初始化。
他們在哪里分配?
鏈接器或加載器決定的位置。 這可以通過編寫自己的鏈接描述文件來實現(恐怕超出了此答案的范圍)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.