【发布时间】:2014-04-02 21:12:24
【问题描述】:
这是一个简单的 C++ 类,命名为A:
class A
{
public:
explicit A() : m_a(0) { }
explicit A(int a) m_a(a) { }
int getA() const { return m_a; }
void setA(int a) { m_a = a; }
private:
int m_a;
}
这是我目前所知道的:
- 当您声明类实例的对象时,会为该对象分配内存。分配的内存相当于其成员的内存总和。所以就我而言,它是:
sizeof(A) = sizeof(int) = sizeof(m_a) -
A类的所有成员函数都存储在内存中的某个位置,A类的所有实例都使用相同的成员函数。
这是我不知道的:
成员函数存储在哪里以及它们实际上是如何存储的?例如,假设int 存储在 4 个字节上;我可以想象具有 4 个连续单元的 RAM 内存布局,每个单元存储该 int 的一部分。我怎么能想象这个函数的布局?(这听起来很傻,但我想函数必须在内存中占有一席之地,因为你可以有一个指向它们的指针)。另外,功能指令是如何以及在哪里存储的?我的第一感觉是函数和函数指令存储在程序可执行文件(及其动态或静态库)中,但如果这是真的,当您创建函数指针时会发生什么? AFAIK 函数指针指向 RAM 内存中的位置,它们可以指向程序二进制文件中的位置吗?如果是,这是如何工作的?
谁能向我解释这是如何工作的,并指出我所知道的是对还是错?
【问题讨论】:
-
好吧,如果不先将代码加载到 RAM 中,您将无法执行代码......
-
指针不指向 RAM,而是指向虚拟内存。
标签: c++ pointers memory memory-management