众所周知,当函数返回时,将回收堆栈分配的对象,并在此之前调用关联的析构函数。我的问题是:如何确定内存位置来表示对象,以便我们可以调用析构函数?这样做会产生任何运行时间开销吗?
答案 0 :(得分:2)
我不确定你究竟在问什么,但堆栈分配对象的内存位置在编译时是已知的。没有运行时开销来确定它们的位置。
答案 1 :(得分:2)
堆栈分配对象的位置计算为当前堆栈指针位置的偏移量,因此实际上不需要计算。
与动态内存管理器必须决定对象分配位置的堆分配对象不同,堆栈只是线性的,并根据需要增长,在编译时编译器将知道对象,例如,驻留当前指针少于指定的字节数,并且只要需要该变量,就会在整个二进制代码中使用该值。
答案 2 :(得分:1)
如何确定内存位置代表对象,以便我们可以调用析构函数?
内存位置不确定何时调用构造函数。编译器知道在堆栈上分配了哪些变量,并创建适当的代码来调用相应的析构函数。
至少,他们通常在堆栈上。重点是无论内存存储在何处,都可以使用相同的逻辑。存储在堆栈中只意味着需要以某种方式调用它们。