C ++指针内存使用情况

时间:2012-03-26 15:14:46

标签: c++ pointers memory-management

继续绕圈子,但我仍然不清楚这一点。对答案有感觉;但不确定。下面哪个代码消耗更多内存? [应该是前者,如果我是对的。]

double x;
double* y = new double(x);

OR

double x;
double* y = &x;

6 个答案:

答案 0 :(得分:7)

在前者中,存在两个doublex,以及y指向的xy在堆栈上分配,double在堆上。

在后者中,只有一个x存在(ydouble也指向)。这里没有涉及堆分配。

所以,从表面上看,你是对的。

在两种情况下,堆栈上都有一个double*,堆栈上也有一个double。两者之间的区别在于,在第一种情况下,在堆上分配了一个new double(x)(由{{1}}分配的那个)。因此,第一种情况需要更多存储空间。

答案 1 :(得分:7)

以下内容在堆上消耗sizeof( double ) + sizeof( double* )sizeof( double )

double x;
double* y = new double(x);

以下消耗sizeof( double ) + sizeof( double* )

double x;
double* y = &x;

答案 2 :(得分:1)

double x;
double* y = &x;

将采用sizeof(double) + sizeof(void*)

double x;
double* y = new double(x);

sizeof(double) + sizeof(double) + sizeof(void*)。还通过new从堆中分配内存。基于堆分配器还会有更多的簿记开销(特别是如果它分解了一个连续的空闲块),它会更慢。

答案 3 :(得分:1)

第一个。有两个双打和一个指针(通常是长整数)

在第二个中你只有一个双指针和一个指针

答案 4 :(得分:1)

在这个例子中:

double x;
double* y = new double(x);

您有x的内存空间,指针y,以及存储x副本的新分配内存,由y指向。

在这个例子中:

double x;
double* y = &x;

你有x的内存空间,指针y指向x。这占用的空间更少。

答案 5 :(得分:0)

首先在第一行为1 double分配空间,然后在第二行为1指针和另一个double分配空间,并从旧的复制值。 后者为1倍和指针分配空间。 所以首先是更多的内存消耗。