【问题标题】:Where are the functions inside of structs stored in memory? [duplicate]存储在内存中的结构内部的函数在哪里? [复制]
【发布时间】:2022-01-18 22:55:53
【问题描述】:

假设我有一个这样的结构:

struct 64BitStruct
{
    uint64_t value;
    void SomeFunction(bool enable);
    bool SomeOtherFunction();
};

sizeof(64BitStruct) 返回8 字节,即 64 位。我假设那些 64 位是结构中的 value 变量,但是函数存储在哪里?

【问题讨论】:

  • 程序中所有函数(全局、命名空间或成员函数)的所有实际代码都收集到可执行文件的单个部分中,并由操作系统加载到内存中的某个位置。
  • void SomeFunction(bool enable); bool SomeOtherFunction(); 是成员函数的声明,因此它们不会影响结构的大小。所以它们不代表“特定于实例”的概念,而是一个类范围的概念。因此,这些函数的代码存储在.text 部分中——就像任何其他代码一样,例如main 中的代码。您可能会将函数声明与指向函数的指针混淆,这会影响类的大小,并允许该结构的不同实例指向不同的函数。
  • 函数不占用对象空间,原因同static成员变量不占用对象空间。该函数只需要存在一个实例,供所有对象实例使用。

标签: c++ memory struct


【解决方案1】:

成员函数是结构类型的所有对象的通用函数。因此它们与对象分开存储。您示例中结构的大小实际上是其数据成员的大小。如果一个结构有虚函数,那么它隐式包含一个指向虚函数指针表的指针,作为该结构类型的每个对象的数据成员。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2018-10-09
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    相关资源
    最近更新 更多