【发布时间】: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成员变量不占用对象空间。该函数只需要存在一个实例,供所有对象实例使用。