2016-01-26 43 views
0

我知道JVM有一個單獨的類加載器,它是加載類並執行它們的默認運行時方法。我只想知道類加載如何爲cpp工作。 cpp中的類加載與操作系統中的動態加載有些相關。如果這些類沒有被動態加載,我想沒有真正的堆分配需求。但cpp顯然擁有免費()內存選項。我有點困惑。它是如何工作的?cpp類是否動態加載?

編輯:我明白爲什麼堆是對象初始化所必需的。但靜態或動態加載類的原因本身並不清楚,尤其是cpp的方式。

+0

對於對象實例化,您需要的堆分配要比類加載多得多。 – Thilo

+0

動態類加載和堆分配(又名動態內存)是完全不相關的概念。事實上,「靜態或動態加載類」的含義並不清楚。 C++語言沒有這樣的概念。 – AnT

+0

我想你會混淆[Java反射](http://docs.oracle.com/javase/tutorial/reflect/index.html)和[動態內存分配](http://www.cplusplus.com/doc)/tutorial/dynamic /)..如果你想要C++等價的反射,你可以找到最接近的是['RTTI'](https://en.wikipedia.org/wiki/Run-time_type_information)。 – txtechhelp

回答

6

編號
將代碼編譯爲可執行文件後,就沒有類,對象,方法等:只有字節和機器指令。

動態內存與動態類加載無關。 「動態」內存意味着內存的大小在編譯時不一定是已知的,並且可能僅在運行時才知道,具有改變和調整大小的能力,因此是「動態的」。再次,這是通過使用不知道類的機器指令來實現的。

遠程類似於「類加載」的唯一事情是DLL加載。 DLL是編譯代碼,它導出其他程序使用的函數。
該DLL可以在運行時加載和卸載。而且,這些導出的函數已經是機器指令。

+0

但是至少在Java的情況下,類在運行時也具有相關性,對嗎?我只是想知道它是如何與CPP。 – user2277550

+2

C++不是Java。在運行時只有機器指令 –

+0

在C++中,類只是類型系統中的代碼和數據的包裝。編譯器實際上如何實現C++類的具體細節是一個更大的話題,並且有關於它的書籍。 – paddy