如果a类实例被声明为a,它将在内存中的位置
Where the a class instance will be located on memory if it is declared as A a?
如果声明类A的实例:"一个";将在哪种内存类型上创建它?还有其他类型的内存吗?
我的解决方案:
这取决于它的声明位置。如果它是一个全局变量,并且在任何类和函数之外,则它位于堆上。如果它在类或函数中,则在堆栈上。
对吧?
你的问题假设只有两个答案是"stack"answers"heap"。
在函数或类/联合之外声明的所有变量都位于全局内存中。这就是为什么它们通常被称为"全局"。这些内存是通过加载可执行文件创建的,这些类的构造函数在main
执行之前被调用(析构函数在main
执行之后被调用)。
如果在函数内部声明变量,则该变量位于堆栈中。进入"堆"的唯一方法是,如果你用new
显式地分配它,或者如果它是其他对象的成员,它本身被分配。
类/联合的成员存在于声明其变量的地方
如果它是函数的局部,它在堆栈上。如果它是全局的或静态的,它在可执行程序的数据段(AAKA"全局内存")中。如果它是另一个类中的声明,则可以在任何位置,这取决于如何分配类的实例。
Namespace不影响任何内容。它只是为编译器准备的。
编辑:classes.
如果一个实例被声明为A a;
,并且这个声明恰好在一个类中,像这样:
class B
{
A a;
};
则a
的内存位置由B
的封闭实例的分配方式决定。例如,在B b;
的情况下,同样的规则适用-堆栈或全局内存。如果是
,那么您的A
将与其他B
一起存在于堆中。
相关文章:
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 如何在不等待检索的情况下获取C++中的内存位置?
- 向量的内存位置不连续
- 如何根据C++在同一内存位置重新初始化 C# 中的对象(还是自动完成)?
- 常量引用的内存位置
- C++强制变量到一个固定的内存位置
- 为什么未初始化的内存位置的值给出 -842150451 的值?
- 为什么存储在内存位置的值会发生变化?
- 在特定内存位置构造 c++ 对象
- 如果不初始化结构中的向量,它会自动为空还是具有随机内存位置的值?
- 内存位置出现Microsoft C++异常:std::out_of_range
- 函数,返回变量c++占用的内存位置的大小
- 无法在 Opencv 中显示图像导致内存位置
- 从十六进制到双的转换始终导致内存位置的 std::out_of_range
- 错误 在测试.exe 0x76C9FD62时出现未经处理的异常:Microsoft C++异常:内存位置0x006FF8
- 错误:内存位置的 std::length_error
- C++不同内存位置中的默认数组值
- 为什么动态分配的两个变量的内存位置不是连续的?
- Boost.进程间内存位置
- 查找编译时构造类的内存位置