cpp 类 是动态加载的吗?
Are cpp classes dynamically loaded?
我知道 JVM 有一个单独的 class 加载程序,它是加载 classes 并执行它们的默认运行时方法。我只想知道 class loading 是如何为 cpp 工作的。并且 class 在 cpp 中加载与操作系统中的动态加载有些相关。如果 classes 不是动态加载的,我想就没有真正需要堆分配。但是 cpp 显然有 free() 内存选项。我有点困惑。它具体是如何工作的?
编辑:我明白为什么对象初始化需要堆。但是classes本身是静态加载还是动态加载的原因我不是很清楚,尤其是cpp的方式。
没有
一旦代码被编译成可执行文件,就没有 classes、对象、方法等:只有字节和机器指令。
动态内存与动态class加载无关。 "Dynamic" 内存意味着内存的大小不一定在编译时知道,可能只在运行时知道,具有更改和调整大小的能力,因此 "dynamic"。同样,这是使用不了解 classes 的机器指令实现的。
唯一与 "class loading" 相似的是 DLL 加载。 DLL 是编译后的代码,它导出函数供其他程序使用。
DLL 可以在运行时加载和卸载。同样,这些导出的函数已经是机器指令。
我知道 JVM 有一个单独的 class 加载程序,它是加载 classes 并执行它们的默认运行时方法。我只想知道 class loading 是如何为 cpp 工作的。并且 class 在 cpp 中加载与操作系统中的动态加载有些相关。如果 classes 不是动态加载的,我想就没有真正需要堆分配。但是 cpp 显然有 free() 内存选项。我有点困惑。它具体是如何工作的?
编辑:我明白为什么对象初始化需要堆。但是classes本身是静态加载还是动态加载的原因我不是很清楚,尤其是cpp的方式。
没有
一旦代码被编译成可执行文件,就没有 classes、对象、方法等:只有字节和机器指令。
动态内存与动态class加载无关。 "Dynamic" 内存意味着内存的大小不一定在编译时知道,可能只在运行时知道,具有更改和调整大小的能力,因此 "dynamic"。同样,这是使用不了解 classes 的机器指令实现的。
唯一与 "class loading" 相似的是 DLL 加载。 DLL 是编译后的代码,它导出函数供其他程序使用。
DLL 可以在运行时加载和卸载。同样,这些导出的函数已经是机器指令。