存储在内存中的结构内部的函数在哪里? [复制]

Posted

技术标签:

【中文标题】存储在内存中的结构内部的函数在哪里? [复制]【英文标题】: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成员变量不占用对象空间。该函数只需要存在一个实例,供所有对象实例使用。 【参考方案1】:

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

【讨论】:

以上是关于存储在内存中的结构内部的函数在哪里? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

c语言中的静态存储变量是存储在哪里的,一般啥时候用

将结构数组复制到共享内存中

Swift中结构体的方法调度&内存分区

为啥 Java/JVM 实现选择 HEAP 数据结构在内存中存储对象? [复制]

数据页内部结构

InnoDB存储引擎介绍-InnoDB存储引擎结构