内存是分配:堆还是堆栈?

时间:2016-02-09 13:02:03

标签: c++ memory stack heap

#include <iostream>
using namespace std;

struct number
{
    int value;
    int pos;
public:
    number(int a,int b)
    {
        value=a;
        pos=b;
    }
};
int main() {
    // your code goes here
    number(1,2);
    return 0;
}

在这种情况下,number(1,2)分配的内存在哪里?在堆或堆栈上?我们如何验证?

1 个答案:

答案 0 :(得分:6)

除了几个C ++标准库函数之外,C ++还没有堆栈的概念。

有些人将用new分配的内容等同于,将所有其他内容分配到堆栈上。但static存储和其他零碎的东西混淆了粗略的分类。

在您的情况下,number(1, 2);是一个匿名临时用户,具有自动存储持续时间。一个好的编译器可能会注意到匿名临时的构造或销毁没有副作用,因此可能会从编译的二进制文件中完全删除它。所以第三种选择 - 根本没有记忆 - 对我来说似乎很可能。