0

众所周知,当一个函数返回时,堆栈分配的对象将被回收,并在此之前调用相关的析构函数。我的问题是:如何确定一个内存位置来表示对象,以便我们可以调用析构函数?这样做是否会产生任何运行时开销?

4

3 回答 3

2

我不确定您到底在问什么,但堆栈分配对象的内存位置在编译时是已知的。没有运行时开销来确定它们的位置。

于 2012-06-24T03:13:43.427 回答
2

堆栈分配对象的位置被计算为当前堆栈指针位置的偏移量,因此实际上不需要计算。

与动态内存管理器必须决定分配对象的堆分配对象不同,堆栈只是线性的并根据需要相应地增长,在编译时编译器将知道一个对象,例如,驻留在当前指针减少指定数量的字节,并在需要该变量时在整个二进制代码中使用该值。

于 2012-06-24T03:16:03.530 回答
1

如何确定一个内存位置来表示对象,以便我们可以调用析构函数?

内存位置不能确定何时调用构造函数。编译器知道堆栈上分配了哪些变量,并创建适当的代码来调用相应的析构函数。

至少,它们通常在堆栈上。关键是无论内存存储在哪里,都可以使用相同的逻辑。存储在堆栈上仅仅意味着它们需要以一种或另一种方式调用。

于 2012-06-24T03:15:05.730 回答