gpt4 book ai didi

java - 类声明和定义在编译后如何存储在面向对象语言 (C++) 中?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:02:17 25 4
gpt4 key购买 nike

我了解 C 程序的内存组织方式(堆栈、堆、函数调用等)。现在,我真的不明白所有这些东西在面向对象语言(更具体地说,C++)中是如何工作的。

我知道每当我使用 new 关键字时,对象的空间都会分配到堆上。

我的一些基本问题是:

1) 类定义是否在程序执行期间存储在内存中的某处?

2) 如果是,那么它存储在哪里以及如何存储。如果不是,那么函数是如何在运行时调度的(在虚拟/非虚拟函数的情况下)。

3) 当一个对象被分配内存时,关于这个对象的所有细节都存储在里面了? (属于哪个类,成员函数,公有私有(private)变量/函数等)

所以基本上,有人可以解释一下面向对象的代码是如何在编译之后/编译期间进行转换的,以便这些 O.O.P.功能实现了吗?

我对 Java/C++ 很满意。因此,您可以使用任何一种语言来解释逻辑,因为它们具有截然不同的特征。

此外,请添加任何引用链接,以便我也可以从那里阅读它,以防出现进一步的疑问!

谢谢!

最佳答案

1) Are class definitions stored somewhere in memory during execution of the program ?

在 C++ 中,没有。在 Java 中,是的。

2) If yes, then where and how is it stored. If no, then how are the functions dispatched at run time (in case of the virtual/non-virtual functions).

在C++中,对非虚函数的调用被编译器替换为函数的实际静态地址;对虚函数的调用通过 virtual table 工作. new 被转换为内存分配(编译器知道精确的大小),然后调用(静态确定的)构造函数。字段访问由编译器转换为从对象开头访问静态已知偏移量中的内存。

它在 Java 中类似 - 特别是,虚拟表用于虚拟调用 - 除了字段访问可以符号化完成。

3) When an object is allocated memory, what all details about the object are stored in it ? (which class it belongs to, the member functions, the public private variables/functions etc.)

在 C++ 中 - 不存储元数据(好吧,除了 RTTI 所需的一些位)。在 Java 中,您可以获得所有成员的类型信息和可见性以及一些其他内容 - 您可以查看 Java class file definition获取更多信息。

So basically, can someone please explain how the object oriented code gets converted after/during compilation so that these O.O.P. features are implemented?

正如您从我上面的回答中看到的,这实际上取决于语言。

在像 C++ 这样的语言中,繁重的工作由编译器完成,生成的代码与面向对象的概念关系不大 - 事实上,C++ 编译器的典型目标语言( native 二进制代码)是无类型的.

在像 Java 这样的语言中,编译器以中间表示为目标,它通常包含很多额外的细节——类型信息、成员可见性等。这也是启用 reflection 的原因。在那些种类的语言中。

关于java - 类声明和定义在编译后如何存储在面向对象语言 (C++) 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19382248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com