c++全局函数与根据内存的数据成员函数

标签 c++ function global

假设有一种函数,它既可以是全局函数,也可以实现为类成员常量函数(不是静态的,静态的意思是全局的)。函数是否被调用取决于用户的选择。假设 - 在非常特殊的情况下,它通常不被称为或称为稀有。 我对程序的逻辑组织不感兴趣。我的问题是关于内存使用情况。我知道数据成员函数的开销要多一点(多一个指针),因为它是通过一个对象调用的。如果在运行时没有调用该函数怎么办? 如果是全局函数,无论调用与否,在程序的生命周期内都会常驻内存。数据成员函数的情况如何,因为它是通过动态创建的对象调用的 - 根本没有创建,函数所需的内存如何,它将被放置在哪里以及如果对象不是会发生什么创造了吗?

谢谢。

最佳答案

正如评论中提到的,C++ 中的类成员函数可以被认为是一个普通的 C 风格函数,它隐式地将一个指向调用它的类实例的指针作为参数。例如,考虑以下 C++ 代码:

class foo {
 public:
  void set(int j);
 private:
  int i;
};

void foo::set(int j) {
  i = j;
}

函数 foo::set 可以被认为是一个 C 风格的函数,它接受一个 class foo * 类型的(隐藏)参数,当你做 富一个; a->set(3);,(隐式)传递的 class foo *&a

总而言之,无论您是否调用过foo::set,它都会被加载到内存中。 (唯一可能的异常(exception)是,如果您的代码中根本没有调用该函数,在这种情况下,优化器可能会在编译期间删除它,但如果可以根据用户输入动态调用它,那么它将被加载。 ) 另一方面,无论您有多少个 class foo 实例,内存中只需要存在一个 foo::set 拷贝。

关于c++全局函数与根据内存的数据成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20124112/

相关文章:

php - 在 PHP 中定义多个函数参数类型

javascript - Typescript - 全局函数?

python - scipy.optimize.basinhopping 间隔和接受测试语法

c - 当我在全局范围内将 char 变量分配给 int 变量时,为什么编译器会给出错误?

c++ - 在 Ubuntu(Netbeans) 和 Windows(Visual Studio 2012) 中编译相同的 C++ 代码

file - 如何从 MATLAB 中的另一个 m 文件调用一个 m 文件并检索输出?

c++ - 矩阵类 Directx 和 OpenGL

python - 迭代与Python中的列表对应的字典键值

c++ - 使用fstream从C++中的.txt文件获取文本的问题

python - 为什么我的 .so 文件由 boost.python 和 c++ 头文件编译失败?