3

基本上,我在互联网上找不到太多关于此的信息,但我知道基本的类实例化是:-> operator new() -> 从某处分配内存-> 构造函数-> 将值分配给“数据类型” "

现在,我想知道的是,C++ 如何分配类的方法/函数而不是其成员。根据我的网络研究,这不会在 new() 中发生,因为它只是分配原始内存,而且据我所知,我还没有完全弄清楚如何在带有函数的构造函数中做到这一点(而是比函数指针)。另外,我假设由于关键字static的存在,没有这个关键字,它被分配为父类的一部分。这是如何以及在哪里发生的?

另外,如果函数包含在类的内存中,函数 sizeof() 是否只给出类及其成员的大小,还是还包含相关函数?

4

1 回答 1

3

在编译代码时,编译器会将函数起始点的地址存储在原始代码中。该地址可以是相对程序的起始位置,也可以是绝对内存地址。

关键是在代码中调用函数时(假设已解决范围问题),而编译编译器只需将跳转语句插入到函数代码所在的地址。为了返回相同的位置,还有一些其他的操作正在发生。

因此,当您说分配了空间时,它只是函数的字节码占用的空间加上 table inn 编译器中的条目this function is present at this address

这几乎是每种编程语言(编译)的情况,不仅C++.

至于你的另一部分:sizeof(type)返回类型的对象表示的字节大小,它基本上是其成员大小的聚合(如果我们省略了编译器为优化而完成的填充)。

于 2013-06-28T11:22:20.327 回答