【发布时间】:2016-02-08 06:56:50
【问题描述】:
当我使用类指针创建一个类时:
class A{
B* p_b1;
B* p_b2;
A(){}
}
我假设编译器为每个 A 实例生成至少 2 个指针大小的空间。我的问题是,如果它们不是指针而是直接向上的对象,例如:
class A{
B b1;
B b2;
A(){}
}
编译器会在 A 类的内存空间内为 b1 和 b2 分配空间吗?或者它会在堆栈的其他地方声明实际的 B 类?
我问这个的原因是因为我正在尝试减少代码中的内存分配,并且正在徘徊是否会产生任何影响。
【问题讨论】:
-
你在堆栈上的其他地方是什么意思?在您的示例中,b1、b2 是在堆栈上创建的。如果你想减少内存分配,那么使用更少的对象(包括在堆上创建的对象)
-
编译器也从不分配空间。运行时间!
-
@Nandu 是的,但是机器需要在堆栈上为每个对象分配内存。因此,我不得不问它是否会概括分配以覆盖其中的所有对象。本质上是“共享”堆栈分配。
-
x86 机器不需要在堆栈上为每个对象分配内存。静态分配和使用堆是可选的。你的架构是什么?
-
内存必须分配在某个地方,因此如果不减少内存中所需的内容量,就无法减少分配。也许您的意思是动态内存分配?或者你说的是内核分配的内存页数?
标签: c++ class memory-management