存储在内存中的结构内部的函数在哪里? [复制]
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】:
成员函数是结构类型的所有对象的通用函数。因此它们与对象分开存储。您示例中结构的大小实际上是其数据成员的大小。如果一个结构有虚函数,那么它隐式包含一个指向虚函数指针表的指针,作为该结构类型的每个对象的数据成员。
【讨论】:
以上是关于存储在内存中的结构内部的函数在哪里? [复制]的主要内容,如果未能解决你的问题,请参考以下文章